Java基础之抽象类
生活随笔
收集整理的這篇文章主要介紹了
Java基础之抽象类
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
/*
1、抽象類的概述:
動物不應(yīng)該定義為具體的東西,而且動物中的吃,睡等也不應(yīng)該是具體的。
我們把一個不是具體的功能稱為抽象的功能,而一個類中如果有抽象的功能,該類必須是抽象類。
2、抽象類的成員特點:
成員變量:既可以是變量,也可以是常量。
構(gòu)造方法:有。
用于子類訪問父類數(shù)據(jù)的初始化。
成員方法:既可以是抽象的,也可以是非抽象的。
抽象類的成員方法特性:
A:抽象方法 強制要求子類做的事情。
B:非抽象方法 子類繼承的事情,提高代碼復(fù)用性。
一個類如果沒有抽象方法,可不可以定義為抽象類?如果可以,有什么意義?
A:可以。
B:不讓創(chuàng)建對象。
abstract不能和哪些關(guān)鍵字共存?
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();//練習(xí):測試貓類} /*4、學(xué)生案例
具體事務(wù):基礎(chǔ)班學(xué)員,就業(yè)班學(xué)員共性:姓名,年齡,班級,學(xué)習(xí),吃飯 分析:基礎(chǔ)班學(xué)員成員變量:姓名,年齡,班級成員方法:學(xué)習(xí),吃飯就業(yè)班學(xué)員成員變量:姓名,年齡,班級成員方法:學(xué)習(xí),吃飯得到一個學(xué)員類。成員變量:姓名,年齡,班級成員方法:學(xué)習(xí),吃飯抽象方法---學(xué)習(xí)(不一樣)普通方法--吃飯(一樣)實現(xiàn):學(xué)員類基礎(chǔ)班學(xué)員就業(yè)班學(xué)員 */ //定義抽象學(xué)員類 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;}//學(xué)習(xí)public abstract void study();//吃飯public void eat() {System.out.println("學(xué)習(xí)累了,就該吃飯");} }//具體基礎(chǔ)班學(xué)員類 class BasicStudent extends Student {public BasicStudent() {}public BasicStudent(String name,int age,String grand) {super(name,age,grand);}public void study() {System.out.println("基礎(chǔ)班學(xué)員學(xué)習(xí)的是JavaSE");} }//具體就業(yè)班學(xué)員類 class WorkStudent extends Student {public WorkStudent() {}public WorkStudent(String name,int age,String grand) {super(name,age,grand);}public void study() {System.out.println("就業(yè)班學(xué)員學(xué)習(xí)的是JavaEE");} }class AbstractTest3 {public static void main(String[] args) {//我僅僅測試基礎(chǔ)班學(xué)員//按照多態(tài)的方式測試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();//就業(yè)班測試留給自己玩}/*5、公司員工
假如我們在開發(fā)一個系統(tǒng)時需要對員工類進行設(shè)計,員工包含3個屬性:姓名、工號以及工資。 經(jīng)理也是員工,除了含有員工的屬性外,另為還有一個獎金屬性。 請使用繼承的思想設(shè)計出員工類和經(jīng)理類。要求類中提供必要的方法進行屬性訪問。分析:普通員工類成員變量:姓名、工號以及工資。成員方法:工作經(jīng)理類:成員變量:姓名、工號以及工資,**獎金**屬性成員方法:工作實現(xiàn):員工類:普通員工類:經(jīng)理類: */ //定義員工類 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("按照需求寫代碼");} }//經(jīng)理類 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);*///由于子類有特有的內(nèi)容,所以我們用子類來測試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("-------------");//通過構(gòu)造方法賦值m = new Manager("劉意","czbk002",8000,2000);System.out.println(m.getName()+"---"+m.getId()+"---"+m.getSalary()+"---"+m.getMoney());m.work();}版權(quán)聲明:本文為小平果原創(chuàng)文章,轉(zhuǎn)載請注明:http://blog.csdn.net/i10630226
轉(zhuǎn)載于:https://www.cnblogs.com/dingxiaoyue/p/4948237.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Java基础之抽象类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断字典中指定key是否存在
- 下一篇: Java 中的悲观锁和乐观锁的实现