java之初识abstract关键字-_-

杀马特。学长 韩版系。学妹 提交于 2020-01-12 05:02:39

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();
        }
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!