Java基础篇之abstract

Posted sumilemei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础篇之abstract相关的知识,希望对你有一定的参考价值。

1.抽象abstract类的特点

        a.抽象类或抽象方法必须用abstract关键字修饰

        b.抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类

        c.抽象类不能被实例化,因为它不是具体的,抽象类有构造方法,但是不能实例化,抽象类的构造方法是提供给抽象类的子类访问父类数据初始化

2.抽象类的子类

        a.若子类是抽象类,与上一致

        b.若子类不是抽象类,是具体类,就要(强制)重写父类中的抽象方法,即抽象类的实例化是依靠具体的子类来实现的

3.抽象类的成员特点

        a.成员变量:可以是变量,也可以是常量

        b.构造方法:有,带不带参的构造方法都可以有

        c.成员方法:既可以是抽象方法,也可以是非抽象的

                抽象类的成员方法如果是抽象方法,则不允许该抽象方法有方法体,表示需要子类来继承,强制子类来做的事

                抽象类的成员方法如果是非抽象方法,则表示子类继承的事情,提高代码的复用性

4.关于abstract的几个非法修饰符

        final/private+abstract:很明显abstract类是需要被继承来实现功能的,private修饰子类继承不到,final修饰无法被继承

        static+abstract:无意义,用abstract修饰的方法没有方法体,用static修饰的静态方法可以通过类名.的方式直接调用,而调用一个没有方法体的方法没有意义

5.代码演示

abstract class Animal{
    public int num=10;
    public final double PI=3.14;
    public Animal(){
        System.out.println("抽象父类的构造方法");
    }
    public Animal(int num){this.num=num;}
    public abstract void show();
    public int getNum(){
        return num;
    }
    public void setNum(int num){
        this.num=num;
    }
    public void method(){
        System.out.println("我是抽象类中的普通方法,可以有方法体");
    }

}
class Dog extends Animal{
    int num=20;
    public Dog(){
        System.out.println("dog子类的构造方法");
    }
    public void show(){
        System.out.println("我是普通类,继承了抽象类,所以一定要重写抽象父类的抽象方法,因为抽象父类中的抽象方法表示要强制子类做的事");
    }
    public void bark(){
        System.out.println("我是动物,也是狗,我可以看门,会吠");
    }
    public void method(){
        System.out.println("可以重写抽象父类中的方法");
    }
}
abstract class Cat extends Animal{
    public void show(){
        System.out.println("我们一起喵喵喵");
    }
}
class   AbstractDemo {
    public static void main(String[] args) {
        //Animal a=new Cat();报错,因为Cat类也是抽象类,也是不允许这样实例化的
        Animal a=new Dog();
        a.method();
        a.show();
        //a.bark();多态的弊端,可以通过向下转型
        Dog d= (Dog) a;
        d.bark();
        //Cat c= (Cat) a;
        //c.method();
        //c.show();
    }
}

 

以上是关于Java基础篇之abstract的主要内容,如果未能解决你的问题,请参考以下文章

学习大数据:Java基础篇之多态

学习大数据:Java基础篇之多态

学习大数据:Java基础篇之数组

学习大数据:Java基础篇之数组

学习大数据:Java基础篇之运算符

学习大数据:Java基础篇之运算符