abstract关键字
abstract关键字是抽象的意思,所书写的内容会带有抽象的概念
用法(唯二):
1.abstract修饰类
书写格式: abstract class 类名{}
抽象类只能声明引用类型,不能创建对象,即不能实例化一个抽象类,所以抽象类在用在多态创建对象
抽象类不能被final修饰,final修饰的类是无法继承的,而抽象 类是通过子类的继承实现(重写)抽象方法,产生矛盾
抽象类内可以存在:
- 代码块
- 常量
- 变量
- 构造方法
- 普通方法:
- 抽象方法
继承中的抽象类:
1.如果一个类中有抽象方法,则这个类必须是抽象类,而抽象类中未必有抽象方法!
2.子类继承抽象方法,则继承了父类中的抽象方法,如果子类不想变成抽象类,则子类必须实现(即覆盖)父类中声明的所有抽象方法
3.继承抽象类的子类若不是抽象类,则可以创建对象,并可以被抽象类声明的引用指向,即合乎多态的用法
注意: 抽象类虽然不能创建抽象对象,但允许拥有构造方法,创建子类对象时仍会加载构造器
abstract类中可以有普通方法:,可以被子类继承,覆盖方法,子类可以由super调用方法
abstract类中和接口中有同名方法时,要在子类中 重写 重名的抽象类方法,接口的重名方法不再操作
2.abstract修饰方法
书写格式:
public abstract void method();
抽象方法只有声明,没有方法体,即没有实现
抽象方法不能被private修饰,因为抽象方法必须被子类实现(抽象方法重写),而privat权限对于子类是不能访问的,所以会矛盾
抽象方法不能被static修饰,因为被static修饰,可以直接通过类名调用,而抽象方法没有实现主体,没有意义
对于抽象类和抽象方法的浅薄认知:
动物是一个类,而这个类太过特殊,包罗万象:猫是动物,狗也是动物 ,老鼠还是动物等等;而在这个类里,有些动物是具有许多共性的:吃,睡,活动等,这些动作虽然可以被定义成方法,但每个动物的实现确实不同的,所以我们将这些具有共性的方法定义为抽象方法.
抽象的动物类中的,声明了具有抽象方法,提炼了共性动作作为方法名,而确切的如何实现没有规定,留给实现类根据各自的特性重写方法如:动物都能吃,而动物们吃的动作内容各有不同,继而继承了是抽象类的实体类就可以覆盖掉抽象方法,来实现猫"吃"鱼,狗"吃"肉,老鼠"吃"大米.
下面是Demo
abstract class Animal{
abstract void eat();
}
class Dog extends Animal{
@Override
void eat() {
System.out.println("dog eat meat");
}
}
class Cat extends Animal{
@Override
void eat() {
System.out.println("cat eat fish");
}
}
class Mouse extends Animal{
@Override
void eat() {
System.out.println("mouse eat rice");
}
}
测试类:
public class TestDemo {
public static void main(String[] args) {
Animal[] animals={
new Dog(),
new Cat(),
new Mouse()
};
for (int i = 0; i <animals.length; i++) {
animals[i].eat();
}
}
}
来源:CSDN
作者:宫廷白开水
链接:https://blog.csdn.net/qq_41795056/article/details/103824629