码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础篇之abstract

时间:2020-07-22 15:42:23      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:无法   cat   特点   代码   变量   xtend   eth   dem   new   

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

标签:无法   cat   特点   代码   变量   xtend   eth   dem   new   

原文地址:https://www.cnblogs.com/sumilemei/p/13359890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!