java学习(七)java中抽象类及 接口
抽象類的特點:
A:抽象類和抽象方法必須用abstract關鍵字修飾。
B:抽象類中不一定有抽象方法,但是抽象方法的類必須定義為抽象類
c: 抽象類不能被實例化,因為它不是具體的。
? ? ?抽象類有構造方法,但不能被實例化?構造方法的作用是什么?
? ? ?用于子類訪問父類數據的初始化。
D:抽象的子類。
? ? ? ? 如果不想重寫抽象類的方法,該子類是個抽象類。重寫所有的抽象方法,這個時候子類是一個具體的類
抽象類Demo:
//abstract class Animal //抽象類的聲明格式 abstract class Animal {//抽象方法//public abstract void eat(){} //空方法體,這個會報錯。抽象方法不能有主體public abstract void eat();public Animal(){} }//子類是抽象類 abstract class Dog extends Animal {}//子類是具體類,重寫抽象方法 class Cat extends Animal {public void eat() {System.out.println("貓吃魚");} }class AbstractDemo {public static void main(String[] args) {//創建對象//Animal是抽象的; 無法實例化//Animal a = new Animal();//通過多態的方式Animal a = new Cat();a.eat();} }?抽象實例:
/*抽象類的成員特點:成員變量:既可以是變量,也可以是常量。構造方法:有。用于子類訪問父類數據的初始化。成員方法:既可以是抽象的,也可以是非抽象的。抽象類的成員方法特性:A:抽象方法 強制要求子類做的事情。B:非抽象方法 子類繼承的事情,提高代碼復用性。 */ abstract class Animal {public int num = 10;public final int num2 = 20;public Animal() {}public Animal(String name,int age){}public abstract void show();public void method() {System.out.println("method");} }class Dog extends Animal {public void show() {System.out.println("show Dog");} }class AbstractDemo2 {public static void main(String[] args) {//創建對象Animal a = new Dog();a.num = 100;System.out.println(a.num);//a.num2 = 200; System.out.println(a.num2);System.out.println("--------------");a.show();a.method();} } /*貓狗案例具體事物:貓,狗共性:姓名,年齡,吃飯分析:從具體到抽象貓:成員變量:姓名,年齡構造方法:無參,帶參成員方法:吃飯(貓吃魚)狗:成員變量:姓名,年齡構造方法:無參,帶參成員方法:吃飯(狗吃肉)因為有共性的內容,所以就提取了一個父類。動物。但是又由于吃飯的內容不一樣,所以吃飯的方法是抽象的,而方法是抽象的類,類就必須定義為抽象類。抽象動物類:成員變量:姓名,年齡構造方法:無參,帶參成員方法:吃飯();實現:從抽象到具體動物類:成員變量:姓名,年齡構造方法:無參,帶參成員方法:吃飯();狗類:繼承自動物類重寫吃飯();貓類:繼承自動物類重寫吃飯(); */ //定義抽象的動物類 abstract class Animal {//姓名private String name;//年齡private int age;public Animal() {}public Animal(String name,int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//定義一個抽象方法public abstract void eat(); }//定義具體的狗類 class Dog extends Animal {public Dog() {}public Dog(String name,int age) {super(name,age);}public void eat() {System.out.println("狗吃肉");} }//定義具體的貓類 class Cat extends Animal {public Cat() {}public Cat(String name,int age) {super(name,age);}public void eat() {System.out.println("貓吃魚");} }//測試類 class AbstractTest {public static void main(String[] args) {//測試狗類//具體類用法//方式1:Dog d = new Dog();d.setName("旺財");d.setAge(3);System.out.println(d.getName()+"---"+d.getAge());d.eat();//方式2:Dog d2 = new Dog("旺財",3);System.out.println(d2.getName()+"---"+d2.getAge());d2.eat();System.out.println("---------------------------");Animal a = new Dog();a.setName("旺財");a.setAge(3);System.out.println(a.getName()+"---"+a.getAge());a.eat();Animal a2 = new Dog("旺財",3);System.out.println(a2.getName()+"---"+a2.getAge());a2.eat();} }抽象類不能和那些關鍵字共存
/* 一個類如果沒有抽象方法,可不可以定義為抽象類?如果可以,有什么意義?A:可以。B:不讓創建對象。abstract不能和哪些關鍵字共存?private 沖突final 沖突 static 無意義 */ abstract class Fu {//public abstract void show();//非法的修飾符組合: abstract和private//private abstract void show();//非法的修飾符組合//final abstract void show(); //非法的修飾符組合static abstract void show();public static void method() {System.out.println("method");} }class Zi extends Fu {public void show() {} }class AbstractDemo3 {public static void main(String[] args) {Fu.method();} }接口的特點:
A:接口用關鍵字interface表示,interface 接口名{}
B:類實現接口用implements 表示
? ? ? class ?類名 ?implements 接口名{}
C:接口不能實例化
? ? ?接口實例化必須按照多態的方式來實現實例化的
D:接口的子類:
? ? ? 可以是抽象類,但意義不大
? ? ? 可以是具體類,要重寫接口中所有抽象方法
/*接口的特點:A:接口用關鍵字interface表示 interface 接口名 {}B:類實現接口用implements表示class 類名 implements 接口名 {}C:接口不能實例化那么,接口如何實例化呢?按照多態的方式來實例化。D:接口的子類a:可以是抽象類。但是意義不大。b:可以是具體類。要重寫接口中的所有抽象方法。(推薦方案)由此可見:A:具體類多態(幾乎沒有)B:抽象類多態(常用)C:接口多態(最常用) */ //定義動物培訓接口 interface AnimalTrain {public abstract void jump(); }//抽象類實現接口 abstract class Dog implements AnimalTrain { }//具體類實現接口 class Cat implements AnimalTrain {public void jump() {System.out.println("貓可以跳高了");} }class InterfaceDemo {public static void main(String[] args) {//AnimalTrain是抽象的; 無法實例化//AnimalTrain at = new AnimalTrain();//at.jump(); AnimalTrain at = new Cat();at.jump();} }接口成員特點:
? ?成員變量:
? ? ? ? 只能是常量,默認飾符 ?public static final
? ?構造方法:
? ? ? ?沒有,因為接口主要是擴展功能的,而沒有具體存在
? ?成員方法:
? ? ? ?只能是抽象方法,默認修飾符 ?public abstract
/*接口成員特點成員變量;只能是常量,并且是靜態的。默認修飾符:public static final建議:自己手動給出。構造方法:接口沒有構造方法。成員方法:只能是抽象方法。默認修飾符:public abstract建議:自己手動給出。所有的類都默認繼承自一個類:Object。類 Object 是類層次結構的根類。每個類都使用 Object 作為超類。 */ interface Inter {public int num = 10;public final int num2 = 20;public static final int num3 = 30;//錯誤: 需要<標識符>//public Inter() {}//接口方法不能帶有主體//public void show() {}//abstract void show(); //默認publicpublic void show(); //默認abstract }//接口名+Impl這種格式是接口的實現類格式 /* class InterImpl implements Inter {public InterImpl() {super();} } */class InterImpl extends Object implements Inter {public InterImpl() {super();}public void show() {} }//測試類 class InterfaceDemo2 {public static void main(String[] args) {//創建對象Inter i = new InterImpl();System.out.println(i.num);System.out.println(i.num2);//i.num = 100;//i.num2 = 200;//System.out.println(i.num); //無法為最終變量num分配值//System.out.println(i.num2);//無法為最終變量num2分配值 System.out.println(Inter.num);System.out.println(Inter.num2);System.out.println("--------------");} }?
轉載于:https://www.cnblogs.com/chenchenphp/p/7020512.html
總結
以上是生活随笔為你收集整理的java学习(七)java中抽象类及 接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hadoop之blockreport
- 下一篇: Shell中各种判断语法