java 抽象类

1.java抽象类的基本概念
普通类就是完善的功能类,直接生产对象并使用,其中的方法都已经实现完整(带有方法体"{}").抽象类的最大特点包含了抽象方法,抽象方法是只声明(没有方法体)的方法,抽象方法定义时使用abstract关键字完成,并且抽象方法一定要在抽象类中,抽象类要使用abstract关键字声明.

2.下面程序可以了解到,由于类中存在了一个抽象方法get(),所以A类就必须使用abstract定义为抽象类,但是抽象类毕竟不是完整的类,所以不能像以前那样,直接实例化对象.

abstract class A{
     private String in = "芷若 张无忌";
    public void print(){
                 System.out.print(in);
                 }
        public  abstract void get();                    //抽象方法:只有声明没有方法体         
     }

错误使用----直接实例化
一个类对象实例化后,可以调用类中的属性和方法,但是抽象类中的抽象方法没有方法体,所以这样肯定不合理.

public  class Test{
      public static void main(String args[]){
         A a =new A()            //错误:Cannot instantiiate the type A
          }
      }

在实际开发中,抽象类使用原则如下.
1.抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;
2.子类(如果不是抽象类)必须覆写抽象中的全部抽象方法;
3.抽象类对象可以使用对象的向上转型,通过子类来进行实例化操作.

3.使用抽象类
与之前类的继承不一样的是,抽象类定义出子类必须要覆写的方法,而之前的类可以选择性地决定是否需要覆写,并且,抽象类实际上就比普通类多了一些抽象方法而已,其他定义和普通类一样.
在这里插入图片描述
运行结果
在这里插入图片描述
结论:
1.抽象类不能使用final定义,final定义的类不能有子类.
2.抽象方法可以有构造方法,抽象类除了包含抽象方法外,还包含了普通方法和属性,而属性一定要在构造方法执行完毕后才可以进行初始化操作.
3.抽象类可以没有抽象方法,但是如果有抽象方法,则一定是抽象类,即使抽象类没有抽象方法,也不能够被直接实例化.
4.抽象类使用static有两种情况:
情况一:直接使用static,肯定无法定义一个抽象类
情况二:在内部类定义可以直接使用static,就表示定义了一个内部抽象类.

4.定义内部抽象类
定义抽象内部类,同时使用static声明,这就表示一个外部类,即抽象类的名称为"A.B".
在这里插入图片描述
运行结果
在这里插入图片描述
5.看下面程序
在这里插入图片描述
运行结果
输出结果为"0",要解释这个结果,参考之前讲过构造方法给出的问题:“一个类只有执行了构造方法后,才可以为类中的属性初始化,而在属性没有初始化前,类中所有的属性都是对应数据类型的默认值”.
主类实例化的是子类对象,根据对象的实例化流程,子类对象实例化前首先调用父类构造,为父类中的属性初始化,这时候子类对象由于没有被实例化,所以Po2类中的x属性就是其对应数据类型的默认值0,在父类构造中,又调用了print()方法,而此时实例化的是子类对象,所以调用的肯定是被覆写过得方法,所以结果为"x=0".
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值