抽象類
抽象類:如果一個類含有抽象方法绑改,則這個類為抽象類谢床,用關(guān)鍵字abstract聲明,并且一定要寫绢淀,不可省略萤悴。
抽象方法:只有聲明而沒有實現(xiàn)的方法為抽象方法,用abstract聲明皆的,不可省略覆履。
public abstract class Animal {
String color;
double weight;
public Animal(String color, double weight) {
super();
this.color = color;
this.weight = weight;
}
public abstract void cry();
public void display(){
System.out.println("顏色是:"+color+"體重是:"+weight);
}
}
此處cry()為抽象方法, Animal為抽象類。
抽象類的使用規(guī)則:
- 抽象類與抽象方法必須都用abstract關(guān)鍵字聲明硝全,不可省略栖雾。
- 抽象方法只有方法的聲明而沒有方法的實現(xiàn)。
- 抽象方法必須為public或protected伟众,不能為private析藕,否則不能被子類繼承,實現(xiàn)不了該方法凳厢。
- 抽象類不能實例化账胧,它的子類必須重寫抽象類中的全部抽象方法。
- 抽象類中可以定義抽象方法也可以定義普通方法先紫,但普通類中只能定義普通方法治泥。
- 抽象類不能用final修飾,因為被final修飾的類不能被繼承遮精。
- 允許在抽象類中定義構(gòu)造方法居夹,也可以在子類中用super調(diào)用父類的構(gòu)造方法。
- 抽象類使用的時候一定要有子類本冲,子類用extends關(guān)鍵字來繼承准脂,一個類不能同時繼承多個抽象類。
下面給出一個例子
//抽象類Animal
public abstract class Animal {
String color;
double weight;
public Animal(String color, double weight) {
super();
this.color = color;
this.weight = weight;
}
public abstract void cry();
public void display(){
System.out.println("顏色是:"+color+"體重是:"+weight);
}
}
//子類Cat
public class Cat extends Animal{
public Cat(String color, double weight) {
super(color, weight);
}
public void cry(){
System.out.println("喵喵喵");
}
}
//子類Dog
public class Dog extends Animal {
public Dog(String color, double weight) {
super(color, weight);
}
@Override
public void cry() {
System.out.println("汪汪汪");
}
}
//實現(xiàn)類Test
public class Test {
public static void main(String[] args) {
Cat cat=new Cat("red",90);
cat.cry();
cat.display();
Dog dog=new Dog("green",100);
dog.cry();
dog.display();
}
}
接口
接口:如果一個類中完全由靜態(tài)常量(用static,final修飾)和抽象方法組成檬洞,則該類可以設(shè)計為一個接口狸膏。
接口三部曲:
- 定義接口
- 實現(xiàn)接口
- 使用接口
//定義接口
public interface Human {
//靜態(tài)常量
public static final String TYPE="haha";
//抽象方法
public abstract void run();
public abstract void say();
}
由于接口就是定義常量和抽象方法的,所以可以簡寫:
//定義接口
public interface Human {
//靜態(tài)常量
String TYPE="haha";
//抽象方法
void run();
void say();
}
接口與抽象類一樣不能會直接實例化疮胖,需要通過實現(xiàn)類來實現(xiàn)(implements)接口中的抽象方法环戈,實現(xiàn)類中也可以定義自己的屬性和方法闷板。
//實現(xiàn)Human接口
public class Person implements Human {
double height;
double weight;
public Person(double height, double weight) {
super();
this.height = height;
this.weight = weight;
}
//實現(xiàn)接口的抽象方法
public void run() {
System.out.println("我跑了兩萬米");
}
public void say() {
System.out.println("Hello World!");
}
//定義自己的抽象方法
public void display(){
System.out.println("我的身高是:"+height+"我的體重是:"+weight);
}
}
另外定義一個類來使用該接口
//使用接口
public class Test2 {
public static void main(String[] args) {
Person person1=new Person(155.0,95);
person1.display();
person1.run();
person1.say();
Person person2=new Person(160.0,99);
person2.display();
person2.run();
person2.say();
}
}
運行結(jié)果:
我的身高是:155.0我的體重是:95.0
我跑了兩萬米
Hello World!
我的身高是:160.0我的體重是:99.0
我跑了兩萬米
Hello World!
接口的使用規(guī)則:
- 接口與抽象類一樣不能會直接實例化澎灸,需要通過實現(xiàn)類來實現(xiàn)(implements)接口中的抽象方法,實現(xiàn)類中也可以定義自己的屬性和方法遮晚。
- 實現(xiàn)類可以同時使用多個接口性昭,接口用逗號隔開
public class A implement B,C,D{}
- 實現(xiàn)類同時共享多個接口中的常量,且必須實現(xiàn)接口中的多個方法县遣。
- 若實現(xiàn)類中仍然有未實現(xiàn)的抽象方法糜颠,則它仍然為抽象類。
5.接口是一種約定萧求,一種能力:接口中規(guī)定了實現(xiàn)類必須實現(xiàn)的所有方法其兴,且要求實現(xiàn)類必須有能力提供每個方法的具體實現(xiàn)。 - 一個類可以只能繼承一個父類夸政,但是可以實現(xiàn)多個接口元旬。
- 一個接口可以同時繼承多個接口,實現(xiàn)接口的多繼承,但不能繼承抽象類匀归。