Java基础之抽象类
生活随笔
收集整理的這篇文章主要介紹了
Java基础之抽象类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*
1、抽象類的概述:
動物不應該定義為具體的東西,而且動物中的吃,睡等也不應該是具體的。
我們把一個不是具體的功能稱為抽象的功能,而一個類中如果有抽象的功能,該類必須是抽象類。
2、抽象類的成員特點:
成員變量:既可以是變量,也可以是常量。
構造方法:有。
用于子類訪問父類數據的初始化。
成員方法:既可以是抽象的,也可以是非抽象的。
抽象類的成員方法特性:
A:抽象方法 強制要求子類做的事情。
B:非抽象方法 子類繼承的事情,提高代碼復用性。
一個類如果沒有抽象方法,可不可以定義為抽象類?如果可以,有什么意義?
A:可以。
B:不讓創建對象。
abstract不能和哪些關鍵字共存?
private 沖突
final 沖突
static 無意義
3、貓狗案例
/*
貓狗案例
*/
//定義抽象的動物類 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();//練習:測試貓類} /*4、學生案例
具體事務:基礎班學員,就業班學員共性:姓名,年齡,班級,學習,吃飯 分析:基礎班學員成員變量:姓名,年齡,班級成員方法:學習,吃飯就業班學員成員變量:姓名,年齡,班級成員方法:學習,吃飯得到一個學員類。成員變量:姓名,年齡,班級成員方法:學習,吃飯抽象方法---學習(不一樣)普通方法--吃飯(一樣)實現:學員類基礎班學員就業班學員 */ //定義抽象學員類 abstract class Student {//姓名private String name;//年齡private int age;//班級private String grand;public Student() {}public Student(String name,int age,String grand) {this.name = name;this.age = age;this.grand = grand;}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 String getGrand() {return grand;}public void setGrand(String grand) {this.grand = grand;}//學習public abstract void study();//吃飯public void eat() {System.out.println("學習累了,就該吃飯");} }//具體基礎班學員類 class BasicStudent extends Student {public BasicStudent() {}public BasicStudent(String name,int age,String grand) {super(name,age,grand);}public void study() {System.out.println("基礎班學員學習的是JavaSE");} }//具體就業班學員類 class WorkStudent extends Student {public WorkStudent() {}public WorkStudent(String name,int age,String grand) {super(name,age,grand);}public void study() {System.out.println("就業班學員學習的是JavaEE");} }class AbstractTest3 {public static void main(String[] args) {//我僅僅測試基礎班學員//按照多態的方式測試Student s = new BasicStudent();s.setName("林青霞");s.setAge(27);s.setGrand("1111");System.out.println(s.getName()+"---"+s.getAge()+"---"+s.getGrand());s.study();s.eat();System.out.println("--------------");s = new BasicStudent("武鑫",48,"1111");System.out.println(s.getName()+"---"+s.getAge()+"---"+s.getGrand());s.study();s.eat();//就業班測試留給自己玩}/*5、公司員工
假如我們在開發一個系統時需要對員工類進行設計,員工包含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();}版權聲明:本文為小平果原創文章,轉載請注明:http://blog.csdn.net/i10630226
轉載于:https://www.cnblogs.com/dingxiaoyue/p/4948237.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Java基础之抽象类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断字典中指定key是否存在
- 下一篇: CSS cursor 属性