面向对象 抽象(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+ ",我的工作内容是管理");} }