Java抽象类

一:概述

要说抽象类先来说说抽象方法,抽象方法指没有方法体的方法,同时需要用abstract修饰。而拥有抽象方法的类就是抽象类,也需要abstract来修饰。

二:使用与注意

抽象类的使用原则如下:
(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
(2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理。
(3)抽象类不一定必须有子类,使用extends继承,一个子类只能继承一个抽象类。 常量类做成抽象类,防止实例化。但是如果抽象类有抽象方法一定必须有子类(因为抽象类的轴向方法必须被子类全部重写
(4)子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。)
抽象类直接实例化:

 A a=new A();
        a.tell1();

在这里插入图片描述

通过子类实例化:

abstract class A{
    public void tell1(){

        System.out.println("A--tell1");
    }
}
class B extends A{
    public void tell1(){

        System.out.println("B--tell1");
    }
}
public class dogi {
    public static void main(String[] args) {
        //向上转型
        A a=new B();
        a.tell1();
    }
}

输出:
在这里插入图片描述
我们看到这里可以间接的实例化,通过父类的引用指向子类的对象,子类进行实例化之前需要实例化它的父类,java三大特征之一的多态。
请注意一下

 //向上转型
        A a=new B();
        a.tell1();
 //向上转型
        A a=new A();
        B b=new B();
        a=b;

虽然这里两个向上转型意思一样,但是在抽象类通过子类实例化时,只能使用第一种匿名对象方法一部一步实例化第二种会报错。
5):由于抽象类里会存在一些属性,那么抽象类中一定存在构造方法,其存在目的是为了属性的初始化。 并且子类对象实例化的时候,依然满足先执行父类构造,再执行子类构造的顺序。(使用向上转型实例化)
6):抽象类可以用final声明么?
不能,因为抽象类必须有子类,而final定义的类不能有子类;
7):外部抽象类不允许使用static声明,而内部的抽象类运行使用static声明。使用static声明的内部抽象类相当于一个外部抽象类,继承的时候使用“外部类.内部类”的形式表示类名称。
/
/
/
希望看到我文章朋友,如果发现有什么不足之处,能够不吝赐教,多多指点,我一定洗耳恭听。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值