抽象类
2024/8/26下午课
重点记忆:抽象类里面的构造器,无法完成创建对象的功能,但是可以完成初始化的功能。
抽象类
1. 为什么会有抽象类
继承的本质是代码的复用。
当子类继承了父类的方法,但是要求不一致,所以子类就会重写父类的方法。
但当需要修改的方法多了之后。
会发现其实没有必要去实现父类中的方法。
但是,不实现方法的话,子类就没有办法重写了,就不用重写了,自己写好自己的方法就行了。
但是继承可以方便使用多态。
为什么要有多态:父类的引用指向子类的对象。能够丰富代码的能力,使用多态,能够更好的表达java代码。
抽象类既解决了代码的冗余,又可以使用多态。
2. 什么是抽象方法
只定义方法,不实现。
3. 抽象类的特点
- abstract修饰的类叫做抽象类,abstract修饰的方法叫做抽象发放
- abstract修饰的抽象方法需要在子类里面并实现,前提是子类不是抽象类,如果子类是抽象类,可以不用实现(不报错)。
- 抽象类一定是父类
- 只有抽象类当中才能有抽象方法,普通类当中无抽象方法。
- 抽象类当中不一定非要写抽象方法,也可以写普通方法
- 抽象类不能被实例化(不能被创建对象),只能使用多态。【但是抽象类有构造器】
- final和abstract不能同时使用:final使用的类不能被继承,同时final修饰的方法不能被重写。
- abstract修饰的方法不能被static修饰:static修饰的方法叫类方法,属于类,而abstract修饰的方法属于对象。
- 抽象方法不能使用private修饰符进行修饰,因为private修饰的方法只能在本类中访问。而抽象方法要在子类中进行实现。
10.抽象类有构造器,但是接口没有构造器。但是抽象类的构造器不能创建对象。 但是可以完成一些必要性的一些初始化操作,比如说赋值。
构造器作用:在构造对象的时候并对他初始化。
两个点:①创建对象②初始化
抽象类里面的构造器,无法完成创建对象的功能,但是可以完成初始化的功能。
4. 代码解释
package Animals;
public abstract class Animal {
private String name;
//抽象类里面有构造器,构造器无法创建对象,但是可以给变量初始化
//——》子类的构造器里面调用super(参数)可以实现
//但是无法直接用这个Animal类里面的构造器创建对象
public Animal(String name){
this.name=name;
}
public abstract void run();
public void flay(){
System.out.println("所有动物都能飞");
}
public String getName() {
return name;
}
}
package Animals;
public class Dog extends Animal{
public Dog(String name){
super(name);
}
public void run(){
System.out.println("狗跑");
}
}
package Animals;
import learn.A;
public class Test {
public static void main(String[] args) {
// Animal a=new Animal("小狗");
// 报错,因为抽象类里面的构造器不能创建对象
Animal a =new Dog("小狗");
a.run();
System.out.println(a.getName());
// 抽象类里面的构造器可以赋值
}
}