【14-10】面向对象-抽象类的产生 /* 描述狗,行为,吼叫。 描述狼,行为,吼叫。 发现他们之间有共性,可以进行向上抽取。 当然是抽取他们的所属共性类型,犬科。 犬科这类事物,都具备吼叫行为,但是具体怎么叫,是不确定的,是由具体子类来明确的。 这时在描述犬科时,发现了有些功能不具体,这些不具体的功能,需要在类中标识出来,通过Java关键字abstract(抽象). 定义了抽象函数的类也必须被abstract关键字修饰,被abstract关键字修饰的类是抽象类 */ /* 抽象类的特点。 1,抽象类和抽象方法都需要被abstract修饰。 抽象方法一定要定义在抽象类中。 2,抽象类不可以创建实例,原因,调用抽象方法没有意义。 3,只有覆盖了抽象类中所有的抽象方法后,其子类才可以实例化。 否则该子类还是一个抽象类。 之所以继承,更多是在于思想,是面对共性类型操作会更简单。 */ /* 细节问题: 1,抽象类是父类吗? 是的,因为是不断抽取而来的。 2,抽象类是否有构造函数呢? 有,虽然不能给自己的对象初始化,但是可以给自己的子类对象初始化。 抽象类和一般类的异同点: 相同: 1,它们都是用来描述事物, 2,它们之中都可以定义属性和行为。 不同: 1,一般类可以具体的描述事物。 抽象类描述事物的信息不具体。 2,抽象类中可以多定义一个成员,抽象函数。 3,一般类可以创建对象,抽象类不能创建对象。 3,抽象类中是否可以不定义抽象方法。 是可以的,那这个抽象类存在到底有什么意义呢?仅仅是不让该类创建对象。 4,抽象关键字abstract不可以和哪些关键字共存? 1,final (被final修饰的类不能有子类,而抽象类的定义就是为了子类继承它) 2,private(子类要继承抽象类的全部方法才可以创建对象,一旦被private了 子类就不知道了) 3,static (有了静态修饰的方法后,就可以被类名直接调用,而调用抽象类的抽象方法是没有用的) */ abstract class Q { public abstract void houjiao(); } class Dog extends Q { public void houjiao() { System.out.println("汪汪汪汪"); } } class Wolf extends Q { public void houjiao() { System.out.println("嗷嗷嗷嗷"); } } class Test { public static void main(String[] args) { Wolf wolf = new Wolf(); wolf.houjiao(); } } 【14-11】面向对象-抽象类的练习 * 需求:公司中程序员有姓名,工号,薪水,工作内容。 项目经理除了有姓名,工号,薪水,工作内容,还有奖金。 对给出需求进行数据建模。 在问题领域中先找寻其中的对象。 程序员: 属性:姓名,工号,薪水 行为:工作 项目经理: 属性:姓名,工号,薪水,奖金 行为:工作 经过分析发现:程序员和经理都属于员工 员工: 属性:姓名,工号,薪水 行为:工作 但是员工的工作本身具有不具体性,应该是抽象,由具体的子类来体现 */ abstract class Employee { private String name; private String id; private double pay; public Employee(String name,String id,double pay) { this.name = name; this.id = id; this.pay = pay; } public abstract void work(); } //程序员 class Programmer extends Employee { public Programmer(String name,String id,double pay) { super(name,id,pay); } public void work() { System.out.println("code..."); } } //项目经理 class Manager extends Employee { private double bouns; public Manager(String name,String id,double pay,double bouns) { super(name,id,pay); this.bouns = bouns; } public void work() { System.out.println("manage"); } } class AbstractTest { public static void main(String[] agrs) { System.out.println(""); } }
时间: 2024-10-12 05:19:53