09-03 Java 抽象类
生活随笔
收集整理的這篇文章主要介紹了
09-03 Java 抽象类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
抽象類的特點
/*抽象類的概述:動物不應該定義為具體的東西,而且動物中的吃,睡等也不應該是具體的。我們把一個不是具體的功能稱為抽象的功能,而一個類中如果有抽象的功能,該類必須是抽象類。抽象類的特點:A:抽象類和抽象方法必須用abstract關鍵字修飾B:抽象類中不一定有抽象方法,但是有抽象方法的類必須定義為抽象類C:抽象類不能實例化因為它不是具體的。抽象類有構造方法,但是不能實例化?構造方法的作用是什么呢?用于子類訪問父類數據的初始化D:抽象的子類a:如果不想重寫抽象方法,該子類是一個抽象類。b:重寫所有的抽象方法,這個時候子類是一個具體的類。抽象類的實例化其實是靠具體的子類實現的。是多態的方式。Animal a = new Cat(); *///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();//練習:測試貓類 } }抽象類案例
/*假如我們在開發一個系統時需要對員工類進行設計,員工包含3個屬性:姓名、工號以及工資。經理也是員工,除了含有員工的屬性外,另為還有一個獎金屬性。請使用繼承的思想設計出員工類和經理類。要求類中提供必要的方法進行屬性訪問。分析:普通員工類成員變量:姓名、工號以及工資。成員方法:工作經理類:成員變量:姓名、工號以及工資,獎金屬性成員方法:工作實現:員工類:普通員工類:經理類: */ //定義員工類 abstract class Employee {//姓名、工號以及工資private String name;private String id;private int salary;public Employee() {}public Employee(String name,String id,int salary) {this.name = name;this.id = id;this.salary = salary;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public int getSalary() {return salary;}public void setSalary(int salary) {this.salary = salary;}//工作public abstract void work(); }//普通員工類 class Programmer extends Employee {public Programmer(){}public Programmer(String name,String id,int salary) {super(name,id,salary);}public void work() {System.out.println("按照需求寫代碼");} }//經理類 class Manager extends Employee {//獎金private int money; //bonus 獎金public Manager(){}public Manager(String name,String id,int salary,int money) {super(name,id,salary);this.money = money;}public void work() {System.out.println("跟客戶談需求");}public int getMoney() {return money;}public void setMoney(int money) {this.money = money;} }class AbstractTest4 {public static void main(String[] args) {//測試普通員工Employee emp = new Programmer();emp.setName("林青霞");emp.setId("czbk001");emp.setSalary(18000);System.out.println(emp.getName()+"---"+emp.getId()+"---"+emp.getSalary());emp.work();System.out.println("-------------");emp = new Programmer("林青霞","czbk001",18000);System.out.println(emp.getName()+"---"+emp.getId()+"---"+emp.getSalary());emp.work();System.out.println("-------------");/*emp = new Manager();emp.setName("劉意");emp.setId("czbk002");emp.setSalary(8000);emp.setMoney(2000);*///由于子類有特有的內容,所以我們用子類來測試Manager m = new Manager();m.setName("劉意");m.setId("czbk002");m.setSalary(8000);m.setMoney(2000);System.out.println(m.getName()+"---"+m.getId()+"---"+m.getSalary()+"---"+m.getMoney());m.work();System.out.println("-------------");//通過構造方法賦值m = new Manager("劉意","czbk002",8000,2000);System.out.println(m.getName()+"---"+m.getId()+"---"+m.getSalary()+"---"+m.getMoney());m.work();} }抽象類的幾個小問題:
/* 一個類如果沒有抽象方法,可不可以定義為抽象類?如果可以,有什么意義?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定義的方法,又沒有方法體;所以無意義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();} }?
轉載于:https://www.cnblogs.com/baiyangyuanzi/p/6825148.html
總結
以上是生活随笔為你收集整理的09-03 Java 抽象类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Redis官方文档》Data type
- 下一篇: #Java小案例 随机产生数