浅谈java里的抽象类

  1. 在java里含有抽象方法的类一定要声明为抽象类
  2. 抽象类的抽象方法只能声明,不需要实现也不能实现
  3. 继承抽象类的子类,如果子类也是抽象类,则可以不实现抽象方法,子类不是抽象类的话则必须实现抽象方法

新建一个抽象类Person

package review;

public abstract class Person
{
    public void show() 
    {
        System.out.println("调用抽象类Person的非抽象方法\n");
    }

    public abstract void whyIsAbstract() ;
}

创建一个实现了抽象类的ImplementationAbstractClass类,可以
看到ImplementationAbstractClass类不是抽象类,所以必须实现抽象方法whyIsAbstract()。如果不实现则会出错

public class ImplementationAbstractClass extends Person 
{
    public void whyIsAbstract() 
    {
        System.out.println("调用ImplementationAbstractClass类实现的抽象方法whyIsAbstract()\n");

    }

    public void show()
    {
        System.out.println("调用ImplementationAbstractClass类show()的方法\n");
    }

}

ImplementationAbstractClass类还重写了show()方法,
创建ImplementationAbstractClass类对象调用show()方法时,将会调用重写后的show()方法

下面创建一个继承了抽象类的NotImplemention类来验证如果不重写show()方法调用时将会调用Person类的show()方法

public class NotImplemention extends Person 
{
    public void whyIsAbstract() {}
}

下文创建一个抽象类Student,继承父类Person,由于子类是抽象类,所以不实现父类的抽象方法whyIsAbstract()是允许的

package review;

public abstract class Student extends Person 
{
    public void  introduce() 
    {
        System.out.println("我是学生类");
    }
}

CollegeStudent类继承了抽象类Student,抽象类Student里有未实现的抽象方法whyIsAbstract()
所以CollegeStudent类就必须实现whyIsAbstract()方法

public class CollegeStudent extends Student 
{


    @Override
    public void whyIsAbstract() 
    {
        System.out.println("CollegeStudent类实现了抽象类的whyIsAbstract()方法 ");
    }

}

主函数验证如下:

package review;

public class Main 
{

    public static void main(String[] args) 
    {
        ImplementationAbstractClass test=new ImplementationAbstractClass();
        System.out.println(test.toString());
        test.whyIsAbstract();

        Person one=test;
        System.out.println(one.toString());
        one.show();
        Person two=new ImplementationAbstractClass();
        System.out.println(two.toString());

        two.show();

        Person three=new NotImplemention();
        System.out.println(three.toString());
        three.show();

        Student student=new CollegeStudent();
        student.whyIsAbstract();
        student.introduce();
    }
}

这里写图片描述

总结:在java里含有抽象方法的类一定要用abstract关键字声明,继承了抽象类的子类如果不是抽象类,
则必须重写父类的抽象方法;子类如果重写了父类的非抽象方法,子类对象调用该方法时将调用最新的方法,即重写后的方法;
抽象类不能实例化,只能通过其子类实例化。
这里写图片描述
使用子类实例化抽象类时实质是把子类对象的指针赋给父类,即父类对象名和子类对象名指向同一个地址,上图可以证明抽象类Person对象与其子类
ImplementationAbstractClass对象test指向同一个对象id号,并且类型均为子类类型,
即通过子类实例化的父类对象所属类型依旧为子类类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值