抽象类、抽象方法、接口、内部类

1. 抽象类:不能直接实例化,只能被继承,可以通过向上转型,指向子类实例

  • 包含抽象方法的类一定是抽象类
  • 抽象类中可以没有抽象方法

2. 抽象方法:不允许包含方法体;子类中需要重写父类的抽象方法,否则,子类也是抽象类

  • static、final、private不能与abstract并存,加了这三个修饰符后,不能被子类重写

3. 接口

  • 接口定义了某一批类所需要遵守的规范
  • 接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法
  • 接口的访问修饰符:public 默认
  • 接口中抽象方法可以不写abstract关键字,访问修饰符默认public
  • 当类实现接口时,需要去实现接口中的所有抽象方法,否则需要将该类设置为抽象类
  • 接口中可以包含常量,默认public static final
  • 默认方法:可以带方法体,jdk1.8后新增 default void moren(){} 可以在实现类中重写,并可以通过接口的引用调用
  • 静态方法:可以带方法体,jdk1.8后新增 static void jingtai(){} 不可以在实现类中重写,可以通过接口名调用
  • 多重接口中存在相同的默认方法,实现类需要重写该默认方法
  • 多重接口中存在相同的常量,子类中需要定义该常量,否则报错
  • 接口可以实现继承关系,并且可以继承多个父接口
public interface ISon extends IFather, IMother {
    run();
}

4. 内部类:

  • 成员内部类:在外部使用时,无法直接实例化,需要借由外部类信息才能完成实例化;内部类的访问修饰符可以任意,但是访问范围会受到影响;内部类可以直接访问外部类的成员属性和方法,如果出现同名属性,优先访问内部类中定义的;可以通过外部类.this.成员的方式,访问外部类中同名的信息;产生的.class文件为外部类$内部类.class;外部类访问内部类信息,需要通过内部类实例,无法直接访问;获取内部类对象实例:

    • 方式1:new 外部类.new 内部类

    • 方式2:外部类对象.new 内部类

    • 方式3:外部类对象.get获取方法

  • 静态内部类:静态内部类中,只能直接访问外部类的静态成员,如果需要调用非静态成员,可以通过对象实例;静态内部类对象实例时,可以不依赖外部类对象;可以通过外部类.内部类.静态成员的方式,访问内部类中的静态成员;当内部类属性与外部类属性同名时,默认直接调用内部类中的成员,如果需要访问外部类中的静态属性,则可以通过外部类.属性的方式,如果需要访问外部类中的非静态属性,则可以通过new 外部类().属性的方式
  • 方法内部类:定义在外部类方法中的内部类
    • 定义在方法内部,作用范围也在方法内
    • 和方法内部成员使用规则一样,class前面不可以添加public、private、protected、static
    • 类中不能包含静态成员
    • 类中可以包含final、abstract修饰的成员
    • 生成的.class文件格式外部类$数字内部类.class
  • 匿名内部类
    • 匿名内部类没有类型名称、实例对象名称
    • 编译后的文件命名:外部类$数字.class
    • 无法使用private、public、protected、abstract、static修饰
    • 无法编写构造方法,可以添加构造代码块
    • 不能出现静态成员
    • 可以实现接口也可以继承父类,但不可兼得
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值