1. 程式人生 > >介面、繼承和多型

介面、繼承和多型

package com.java.exp10;

import sun.font.EAttribute;

/**
 * 1、類的繼承
 *  繼承並不只是擴張父類的功能,還可以重寫父類的成員方法。
 *  重寫,保留父類的成員方法的名稱,重寫成員方法的實現內容,更改成員方法的儲存許可權或更改返回值型別。
 *  重構,與父類的成員方法返回值、方法名稱、引數型別及個數完全相同,唯一不同的是方法的實現內容。
 *  重寫父類方法時,修改方法的修飾許可權只能從小範圍到大的範圍改變。
 *  例項化子類物件時,父類無參構造方法被自動呼叫,但有參構造方法並不能被自動呼叫,只能依賴於super關鍵字顯式地呼叫父類的構造方法
 * 2、Object類
 *  Object類中的getClass()、notify()、notifyAll()、wait()等方法不能被重寫。為final型別
 *  getClass()方法
 *  toString()方法    將一個物件返回為字串形式
 *  equals()方法      比較的是兩個物件的實際內容
 * 3、物件型別的轉化
 *  3.1、向上轉型    直接使用,繼承於抽象,可看作父類的一種
 *  3.2、向下轉型    使用顯式型別轉換,向編譯器指明將父類物件轉換為哪一種型別的子類物件
 * 4、使用instanceof操作符判斷物件型別
 *  myobject instanceof ExampleClass
 *  某類的飲用物件         某個類
 *  instanceof是Java語言中的關鍵字,在Java語言中的關鍵字都為小寫,其返回值是Boolean型別的
 * 5、方法的過載
 *  方法的過載就是在同一個類中允許同時存在一個以上的同名方法,只要這些方法的引數個數或者型別不同即可。
 * 6、多型
 *  Java實現多型有三個必要條件:繼承、重寫、向上轉型
 *  提高了程式碼的擴充套件性
 * 7、抽象類和介面
 *  7.1、抽象類
 *      abstract是定義抽象類的關鍵字,它定義的方法稱為抽象方法,抽象方法沒有方法體
 *      繼承抽象類的所有子類必須將抽象類中的抽象方法記性覆蓋
 *      抽象類不能例項化物件
 *  7.2、介面
 *      介面簡介
 *      介面是抽象類的延伸,可以將它看作純粹的抽象類,介面中的所有方法都沒有方法體
 *      在介面中定義的方法必須被定義為public或abstract形式,其他修飾許可權不被Java編譯器認可
 *      在介面中定義的任何欄位都自動是static和final的
 *      介面與繼承
 *      Java中不允許多重繼承,但是使用介面就可以實現多重繼承,以為一個類可以實現多個介面,使用逗號隔開就可以
 * 
 * */
public class Demo { public static void main(String[] args) { Demo demo = new Demo(); String str = demo.getClass().getName(); System.out.println(str); } }

Animal類

package com.java.exp10;

public class Animal {

    public void shout(Animal animal){
        System.out
.println("叫..."); } public static void eat(Animal animal){ System.out.println("吃..."); } }

Dog類

package com.java.exp10;

public class Dog extends Animal {
    public void eat(){
        System.out.println("啃骨頭...");
    }
    //向上轉型後只能實現父類中的方法,即使在子類中重寫過了,因為使用的是父類的物件,所以不能呼叫子類
    public
static void main(String[] args) { Dog dog = new Dog(); eat(dog); } }

Person類

package com.java.exp10;

public class People {
    String name;
    int age;


    public People() {
        System.out.println("父類無參構造方法被呼叫...");
    }
    public People(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("父類有參構造方法被呼叫...");
    }
}

Student類

package com.java.exp10;

public class Student extends People {
    String name;
    int age;

    public Student() {
        System.out.println("子類無參構造方法被呼叫...");
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("子類有參構造方法被呼叫...");
    }

    public static void main(String[] args) {
        Student stu = new Student("張三",15);
    }
}