这条路一个人走到黑,无味无畏也无谓
—— 24.4.23
一、抽象类的介绍
1.抽象类时怎么来的?
抽取共性方法,放到父类中,发现方法没办法确定具体实现,因为每个子类对此方法的实现细节不一样,此时方法说不清,道不明,可以定义成抽象方法
2.抽象方法所在的类一定是抽象类
3.关键字:
abstract
4.定义抽象方法:
修饰符 abstract 返回值类型 方法名(参数):
5.抽象类:
public abstract class 类名{}
6.注意:
a、抽象方法所在的类一定是抽象类
b、抽象类中不一定非得有抽象方法
c、子类继承抽象父类时,需要重写父类中所有的抽象方法,不然编译报错
d、抽象类不能new对象(实例化),只能通过new子类对象去调用子类重写后的父类方法
7.抽象类和抽象方法的示例
public abstract class Animal { public abstract void eat(); }
8.抽象类的作用
抽象类可以看作是一类事物的标准,要求只要是属于这一类中的,都必须要拥有抽象类中的方法,必须进行实现,至于怎么证明实现,怎么证明拥有?——>重写
至于方法如何实现,看子类重写之后如何实现方法体
9.抽象类的基本使用
父类:
public abstract class Animal { public abstract void eat(); public abstract void drink(); }
子类1:
public class Dog extends Animal{ // ALT+回车 @Override public void eat() { System.out.println("小狗吃骨头"); } @Override public void drink() { System.out.println("小狗喝水"); } }
子类2:
public class Cat extends Animal{ @Override public void eat() { System.out.println("小猫吃鱼"); } @Override public void drink() { System.out.println("小猫喝水"); } }
测试类:
public class Demo115Test { public static void main(String[] args) { Dog dog = new Dog(); dog.eat(); dog.drink(); System.out.println("————————————————"); Cat cat = new Cat(); cat.eat(); cat.drink(); } }
运行结果
二、抽象的注意事项
1.抽象类不能直接new对象,只能创建非抽象子类的对象
2.抽象类中不一定有抽象方法,但是抽象方法所在的类一定是抽象类
3.抽象类的子类,必须重写父类中的所有抽象方法,否则,编译报错,除非该子类也是抽象类
4.抽象类中可以有成员变量、构造方法、成员方法(比普通类中可以多一个抽象方法)
5.抽象类中可以有构造方法,这个构造方法是供子类创建对象时,初始化父类属性使用的
抽象父类:
public abstract class Animal { public abstract void eat(); public abstract void drink(); }
抽象子类
public abstract class Dog extends Animal { @Override public void eat() { } @Override public void drink() { } }
抽象父类
public abstract class Employee { private String name; private int age; public Employee() { } public Employee(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 work(); }
抽象子类
public class Teacher extends Employee { public Teacher() { } public Teacher(String name, int age) { super(name, age); } @Override public void work() { System.out.println("一切都会好的"); } }
测试类
public class Demo116Test { public static void main(String[] args) { Teacher t1 = new Teacher("小明",17); System.out.println(t1.getName()+" "+t1.getAge()); } }