抽象类,接口,内部类

抽象类
一.
abstract修饰类,抽象类
1.该类不可以实例化
2.抽象类一定有构造器,便于子类实例化
3.一般使用子类实例化完成操作
abstract修饰方法,抽象方法
1.抽象方法只有方法的声明 没有方法体
例:
public abstract void eat();
2.包含抽象方法一定是抽象类,但是抽象类不一定有抽象方法
3.若子类重写了父类所有的抽象方法,则子类可
实例化
若子类没有重写所有的抽象方法,则子类仍然是
抽象类,不可实例化


二 接口
目的:为了达到多重继承的效果
interface xxx{
}
1.接口可以定义
全局变量 public static final;
抽象方法 public abstract;
------JDK 8
静态方法 public static
默认方法 default 修饰
2.接口不能定义构造器,接口只能依附于类来实现
3.implements来继承接口
4.
如果子类重写所有的抽象方法则可实例化
否则仍然是抽象类
5.java可以实现多个接口–打破单继承性的局限性
class AA extends BB implements CC,DD,EE
6,接口之间可以继承,可以多继承
7.子类继承的父类与实现的接口声明了同名同参的方法,若无重写,默认调用的是父类的同名同参的方法-------------类优先原则
8 若实现了多个接口,定义了同名同参的方法
若无重写,-------------------报错,接口冲突
所以必须重写


三 内部类
定义:在类A中声明一个类B 则类A是外部类
类B是内部类
1.成员内部类(静态,非静态)
可以调用外部类的结构
可以被static修饰(注意外部类不可以
在外部类中只可修饰方法或属性不能修饰类
在内部类中可以修饰类

可以被四种不同的权限修饰
2.局部内部类 (定义在成员方法,构造器)
3.问题:
1 如何实例化成员内部类的对象
//静态成员内部类
Person.Dog dog=new Person.Dog();new了Person 没有new Dog----Dog静态
//非静态的成员内部类
Person p=new Person();
Person.Dog dog=p.new Dog();
new了Person和Dog
2.如何在成员内部类中区分调用外部类的结构
1.无冲突重名可以直接调用
Person.this.xxx或者直接xxx
2.重名
在这里插入图片描述
第一个是方法内的局部变量–name
第二个是内部类的变量—this.name
第三个是外部类的变量—Person.this.name
3.开发中局部内部类的使用
在这里插入图片描述
调用方法返回接口
则一个方法使用局部内部类实现该接口最后返回该局部内部类
方法二
在这里插入图片描述
直接重写
4.在局部内部类的方法中如果调用此局部内部类所在的方法中的局部变量时
则该局部变量声明为final
在这里插入图片描述
在此次中则是num必须是final
JDK7之前则必须要求声明final
JDK8则可以省略 默认为final

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值