最近在看JAVA教學的視頻,覺得老師講的很好,同時借用源代碼還有筆記來撰寫本系列博客,記錄自己的學習內容,同時也供看到的人學習。
本篇講抽象類(abstract)和接口(interface)的主要內容。
首先來說一說抽象方法,抽象方法是一種只有聲明但是沒有方法體的方法,其意義爲將方法的設計與實現分離。而抽象類之所以叫做抽象類就是因爲有了抽象方法:
接下來看一看相關代碼,關於一些細節方面的提醒均在代碼中體現:
public abstract class Animal {
String ss;//抽象類裏面可以有正常的屬性
public abstract void run(); //定義抽象方法的格式
public void breath(){ //抽象類裏面可以有正常的方法
System.out.println();
run(); //多態,如果調用指定是子類new出來的對象來調用的(抽象類不能new一個對象),所以這裏調用的是子類的方法,不是父類的抽象方法,解釋見上一篇筆記
}
}
class Cat extends Animal{
@Override //註解,JDK5.0之後加入的,要求下面的方法必須是run的重寫
public void run() {
// TODO Auto-generated method stub
System.out.println("Cat run!");
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal a = new Cat();
}
}
第二個內容就是介紹接口:
接口是比抽象類更抽象的類,裏面只有常量(注意:沒有變量)和抽象方法。接口的常量定義的時候屬性永遠是public static final。未實現的方法只能是public abstract。這兩個默認屬性都是可以省略的不用寫出來的。接口優勢在於一個類可以實現多個接口、一個接口可以繼承多個接口。
示例代碼:
public interface MyInterface {
String MAX_VALUE = "10000000";
int max_speed = 120;
public void test01();
public int test02(int a,int b);
}
public class MyClass implements MyInterface {
//要想實現接口必須實現其所有的所有的抽象方法。
int v;
@Override
public void test01() {
// TODO Auto-generated method stub
System.out.println("01");
}
@Override
public int test02(int a, int b) {
// TODO Auto-generated method stub
System.out.println("02!");
return 0;
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyInterface a = new MyClass();
//a.v;回報錯,接口不能跑到實現它的類裏面去調用該類的成員變量.
a.test01();//輸出“01”
}
}