24、抽象类、抽象方法
程序员文章站
2022-06-16 17:01:29
...
1.abstract 抽象修饰符,可以修饰类、方法
2、当多个类存在相同的功能,但是功能的主体不同,这是我们进行向上抽取,只抽取功能的定义,不抽取功能的主体
3、抽象类的特点
01、抽象方法一定要在抽象类中
02、抽象类和抽象方法必须要被abstract关键字修饰
03、抽象类是不能被创建对象,因为调用抽象的方法没意义
抽象类中的方法,没有方法主体
04、抽象类中的抽象方法要被调用,必须由子类重写抽象类中的抽象方法,然后创建子类对象来调用(用多态或者子类直接创建)
Animal c=new Cat(); c.sing()
Cat c=new Cat(); c.sing();
abstract class Animal {
abstract void sing();
}
class Cat extends Animal{
void sing(){
System.out.println("喵喵的唱歌");
}
}
public class Test{
public static void main(String[] args){
Animal c=new Cat();
c.sing();
}
}
05、抽象类中可以定义非抽象的方法,即使该类中没有抽象方法。有时我们需要该类不能被new关键字创建对象,可以用abstract将此类抽象
说明:Animal类被abstract修饰也是有对象的,只不过不是new出来的,因为java中每个类默认会创建构造函数,而子类构造函数第一句默认会有super(),调用父类Animal的无参构造函数,对父类进行初始化,所以Animal类在内存中是有对象存在
//抽象类中可以有非抽象方法
abstract class Animal {
abstract void sing();
void show(){
System.out.println("你好");
}
}
class Cat extends Animal{
void sing(){
System.out.println("喵喵的唱歌");
}
}
public class Test{
public static void main(String[] args){
Animal c=new Cat();
c.show();
}
}
06、子类如果只重写父类中的一部分抽象方法,那么该子类还是一个抽象类,(因为子类继承了父类的抽象方法,抽象方法一顶定义在抽象类中)。如果抽象类中的抽象方法要被使用,子类必须重写抽象类中的所有方法
上一篇: 我可养不起