介面、繼承和多型
阿新 • • 發佈:2018-12-10
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);
}
}