面向對象 抽象(abstract)
抽象類的概述
- A:抽象類概述
- 抽象就是看不懂的
- B:抽象類特點
- a:抽象類和抽象方法必須用abstract關鍵字修飾
- abstract class 類名 {}
- public abstract void eat();
- b:抽象類不一定有抽象方法,有抽象方法的類一定是抽象類或者是接口
- c:抽象類不能實例化那么,抽象類如何實例化呢?
- 按照多態的方式,由具體的子類實例化。其實這也是多態的一種,抽象類多態。
- d:抽象類的子類
- 要么是抽象類
- 要么重寫抽象類中的所有抽象方法
- a:抽象類和抽象方法必須用abstract關鍵字修飾
- C:案例演示
- 抽象類特點
抽象類成員特點
- A:抽象類的成員特點
- a:成員變量:既可以是變量,也可以是常量。abstract是否可以修飾成員變量?不能修飾成員變量
- b:構造方法:有。
- 用于子類訪問父類數據的初始化。
- c:成員方法:既可以是抽象的,也可以是非抽象的。
- B:案例演示
- 抽象類的成員特點
- C:抽象類的成員方法特性:
- a:抽象方法 強制要求子類做的事情。
- b:非抽象方法 子類繼承的事情,提高代碼復用性。
抽象類 之 葵花寶典
public class Test_葵花寶典 {public static void main(String[] args) {岳不群 小岳子 = new 岳不群();小岳子.自宮();}}
abstract class 葵花寶典{ //可以了理解為 葵花寶典是抽象的武功
public abstract void 自宮(); //想要練成葵花寶典 必須自宮,由于自宮方法很多所以用到抽象方法
}class 岳不群 extends 葵花寶典{
public void 自宮(){System.out.println("用牙簽");
}
}class 林平之 extends 葵花寶典{
public void 自宮(){System.out.println("用指甲刀");
}
}
抽象類 之 貓狗
具體事物:貓,狗
- 共性:姓名,年齡,吃飯
- 貓的特性:抓老鼠
- 狗的特性:看家
public class
Text_2
{public static void main(String[] args) {Cat c = new Cat("加菲",8); System.out.println(c.getName()+ "..." + c.getAge()); c.eat(); c.catchMousr();Dog d = new Dog("八公",30); System.out.println(d.getName() + "..." + d.getAge()); d.eat(); d.lookHome(); } }abstract class Animal{ private String name; private int age;public Animal(){}public Animal(String name,int age){this.name = name;this.age = age; } public void setName(String name){ //設置姓名this.name =name; } public String getName(){ // 獲取姓名return name; } public void setAge(int age){ //設置年齡this.age = age; } public int getAge(){ //獲取年齡return age; } public abstract void eat(); // 吃飯 由于不同的動物的吃飯方法不同,所以這里定義吃飯這個方法為abstract方法,因此,Animal類亦應該定義為abstract類 }class Cat extends Animal{public Cat(){}public Cat(String name,int age){super(name,age); }public void eat(){ //貓的吃飯法方法System.out.println("貓吃魚"); } public void catchMousr(){ //貓的抓老鼠方法System.out.println("抓老鼠"); }class Dog extends Animal{ public Dog(){} public Dog(String name,int age){super(name,age); }public void eat(){ //狗的吃飯法方法System.out.println("狗吃肉");} public void lookHome(){ //狗的看家方法 System.out.println("看家");}
}
抽象類 之 老師
- 具體事物:基礎班老師,就業班老師
- 共性:姓名,年齡,講課。
- 具體事物:基礎班學生,就業班學生
- 共性:姓名,年齡,學習
public class Text_Teacher {
public static void main(String[] args) {BaseTeacher bt = new BaseTeacher("黃家駒",32);bt.teach();
}
}
abstract class Teacher {private String name;
private int age;public Teacher(){} //空參構造public Teacher(String name,int age){ //有參構造this.name = name;this.age = age;
}public void setName(String name){ //設置姓名this.name = name;
}
public String getName(){ //獲取姓名return name;
}public void setAge(int age){ // 設置年齡this.age = age;
}public int getAge(){ // 獲取年齡return age;
}public abstract void teach();//由于不同類型的老師講課的方式不同,所以這里的teach方法定義成abstract類型。由于這里的teach方法為抽象類型,所以這里的Teach類也得定義成abstract類。}class BaseTeacher extends Teacher{
public BaseTeacher(){}public BaseTeacher(String name,int age){super(name,age);
}public void teach(){System.out .println("我的姓名是:" + this.getName() + " 我的年齡是:" + this.getAge() + " 講的內容是Java基礎。");
}
}
抽象類 之 經理與員工
- 假如我們在開發一個系統時需要對程序員類進行設計,程序員包含3個屬性:姓名、工號以及工資。
- 經理,除了含有程序員的屬性外,另為還有一個獎金屬性。
- 請使用繼承的思想設計出程序員類和經理類。要求類中提供必要的方法進行屬性訪問。
public class Test_Employee {public static void main(String[] args) {Coder c =new Coder("德瑪西亞","007",8000);c.work();Manager m = new Manager("蒼老師","9527",3000,20000);m.work();}}abstract class Employee{//先定義成員變量private String name; //姓名private String id; //工號private double salary;//工資public Employee(){} //空參構造public Employee(String name,String id,double salary){this.name = name;this.id = id;this.salary = salary;}public void setName(String name){ //設置姓名this.name = name;}public String getName(){ //獲取姓名return name;}public void setId (String id){ //設置idthis.id = id;}public String getId(){ //獲取idreturn id;}public void setSalary(double salary){//設置工資this.salary =salary; }public double getSalary(){ //獲取工資return salary;}public abstract void work();}//程序員class Coder extends Employee{public Coder(){} //空參構造public Coder(String name,String id,double salary){super(name,id,salary);}public void work(){System.out.println("我的姓名是:"+ this.getName() + ",我的工號是" + this.getId() + ",我的工資是:" + this.getSalary() + ",我的工作內容是敲代碼");} }//項目經理class Manager extends Employee{private int bonus; //獎金public Manager (){} //空參構造public Manager(String name,String id,double salary,int bonus){super(name,id,salary);this.bonus=bonus;}public void work(){System.out.println("我的姓名是:"+ this.getName() + ",我的工號是" + this.getId() + ",我的工資是:" + this.getSalary() +"我的獎金是:"+bonus+ ",我的工作內容是管理");} }