抽象
抽象类概述: 不能具体化对象的类,叫做抽象类 例如:动物类--拿不出动物的对象(只能找到子类的对象)
抽象方法概述:在抽象类中,有一些方法,不知道如何实现,这样的方法,叫做抽象方法
例如:动物类中有叫的方法,但不知道如何描述---抽象方法
类抽象作用:自身限制了具体化,只能实例化子类对象---更自然使用多态
抽象方法作用:作为模板使用,意味着子类必须重写该方法
抽象类:主要用在多态中,是前面多态的优化
用法:1.直接赋值多态 2.参数多态 3.返回值多态
抽象类的特点:
1、抽象类不能实例化对象
2、抽象类可以有构造方法
3、抽象类中也可以没有抽象方法(一般不会这么做)
4、抽象类中可以有非抽象的方法
5、抽象方法不能出现在普通类中
6、子类不一定必须要重写抽象类的抽象方法,可以把自身变为抽象类
7.抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类
抽象类的作用:
1、可以被子类继承,提供共性属性和方法
2、可以声明为应用,更自然的使用多态
抽象类直接多态:
abstract class Animal{ //抽象类
public Animal() { //有构造方法 通过默认的super()调的
}
//抽象方法 不能具体实现的方法,但必须要有---模板
public abstract void bark();
public void test() {
}
}
如果抽象类的方法是抽象方法,子类必须要进行处理:
1.把自身变为抽象类
2.子类必须实现抽象类的重写方法
/*abstract*/ class Dog extends Animal{
@Override
public void bark() {
System.out.println("旺财在叫");
}
}
public class Abstract1 {
public static void main(String[] args) {
//Animal animal = new Animal(); //抽象类不能具体化
Animal animal = new Dog(); //直接赋值多态
animal.bark();
}
}
抽象类参数多态:
//案例:老师开着法拉利牌的交通工具上班,自行车,汽车,飞机等都是交通工具
//分析:类:老师,交通工具(父类) 飞机,自行车,汽车(子类) 行为:开, 运行
abstract class Utils{ //抽象类
public abstract void run(); //抽象方法---模板
}
class Bike extends Utils{
@Override
public void run() {
System.out.println("自行车在运行");
}
}
class Car extends Utils{
@Override
public void run() {
System.out.println("汽车在运行");
}
}
class Teacher{
public void start(Utils utils) {//实参传子类对象
utils.run(); //调用子类重写方法
}
}
public class Abstract2 {
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.start(new Bike()); //老师开自行车
teacher.start(new Ca