Java面向物件之抽象類,介面
阿新 • • 發佈:2022-04-29
抽象類:
含有抽象方法的類被宣告為抽象類 抽象方法由子類去實現
含有抽象方法的類必須被宣告為抽象類
抽象類被子類繼承,子類(如果不是抽象類)必須重寫抽象類中的所有抽象方法
抽象方法:
宣告而未被實現的方法
抽象類不能被例項化 子類實現不了, 由下一級子類去實現, 當前類宣告為抽象類, 繼承的這個方法宣告為抽象方法 抽象方法的許可權修飾符必須為public
abstract
//人類 public class Person { private String name; //自定義屬性 引用型別 寵物 private Pet pet; public Person() { } public Person(String name, Pet pet) { this.name = name; this.pet = pet; } public void petHappy() { pet.scream(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public Pet getPet() { return pet; } public void setPet(Pet pet) { this.pet = pet; } }
// 父類寵物類 抽象類 public abstract class Pet { private String pname; //抽象類可以有構造方法 public Pet() { } public Pet(String pname) { this.pname = pname; } //抽象類 的抽象方法 不能有方法體 public abstract void scream(); public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } }
//子類 老虎類 public class Tiger extends Pet { public String fur; // 毛的顏色 public Tiger(String name, String fur) { super(name); this.fur = fur; } public Tiger() { super(); } @Override public void scream() { System.out.println("這是一隻老虎的聲音 !"); } public String getFur() { return fur; } public void setFur(String fur) { this.fur = fur; } }
//子類 兔子類
public class Rabbit extends Pet {
public String fur; // 毛的顏色
public Rabbit(String name, String fur) {
super(name);
this.fur = fur;
}
public Rabbit() {
super();
}
@Override
public void scream() {
System.out.println("兔子會賣萌 !");
}
public String getFur() {
return fur;
}
public void setFur(String fur) {
this.fur = fur;
}
}
//主方法
public class Main {
public static void main(String[] args) {
Pet t1 = new Tiger("qqqq","www");
Pet r1 = new Rabbit();
Person p1 = new Person("小明", t1);
Person p2 = new Person("小紅", r1);
p1.petHappy();
p2.petHappy();
}
}
介面:
一種特殊的抽象類,裡面全部是由全域性常量和公共的抽象方法所組成
類與類之間的實現關係
介面的實現也必須通過子類,使用關鍵字implements,而且介面是可以多實現的
一個類可以同時繼承和實現介面
一個藉口不能整合一個抽象類,但是卻可以通過extends關鍵字同時繼承多個介面,實現介面的多繼承
public interface InterFaceTest1 {
public static final String name = "hanqi";
String pname = "tianqi";
//介面定義的屬性預設public static final
public void testMethod();
}
一個類去實現一個介面必須實現其中的方法
繼承:Java中不支援多繼承,一個類只能繼承一個
介面:介面可以實現多個
//介面1
public interface Inter {
int AGE=22;//介面中的常量都是全域性常量,也就是預設 public全域性公共的,static靜態,final不可改變的
public abstract void tell();
}
//介面2
public interface Inter2 {
public abstract void say();
}
//介面3
public interface Inter3 extends Inter,Inter2{
//介面繼承介面
//一個介面不能繼承一個抽象類,但可以繼承多個介面,實現介面的多繼承
}
//抽象類
public abstract class Chouxc {
public abstract void write();
}
//子類
public class Shixian extends Chouxc implements Inter,Inter2{
public void tell(){
System.out.println("這是類實現的介面 Inter 的抽象方法");
}
public void say(){
System.out.println("這是類實現的介面 Inter2 中的抽象方法");
}
public void write(){
System.err.println("這是類繼承的抽象類中的抽象方法");
}
}
//主方法
public class InterTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Shixian s=new Shixian();
s.tell();
s.say();
System.out.println(Inter.AGE);
System.out.println(s.AGE);
}
}