继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

接口,内部类,匿名内部类

小泡泡
关注TA
已关注
手记 43
粉丝 51
获赞 617

接口:
接口中只有抽象方法,而没有非抽象方法

特点:
1:接口不能被实例化,只能通过多态的形式,让子类实例化
2:接口的子类
A:可以是具体类,但是要求实现所有的抽象方法
B:可以是接口,使用关键字 extends
C:可以是抽象类,使用关键字 implements

// 接口中可不可以有成员变量?可以
// 接口中的成员变量,默认 必须要final修饰,必须是常量
// The blank final field age may not have been initialized
public static final String name = "";
public static final int age = 5;
// 接口中的成员变量,jvm默认 添加public static final
int i = 10;
// 接口中不能存在 构造方法
/**
 * 成员方法:
 *  接口中能不能存在成员方法,肯定能
 *   jdk1.8之前都可以 说 接口中只能有抽象方法
 *
 * 接口中的成员方法,jvm 默认添加 public abstract 修饰
 */
public abstract void eat();
public abstract void sleep();
public abstract void jump();
void method1();
// 创建一个接口对象,也叫实例化一个接口,这个是不允许的
// Cannot instantiate the type IAnimal
// IAnimal ia = new IAnimal();

// 父类引用指向了子类对象
IAnimal ia = new Cat();
接口的子类,也可以是抽象类,此时使用关键字 implements
public abstract class Mammal implements IAnimal {
}
接口的子类,还可以是接口,只不过要将"implements"改成extends
// Syntax error on token "implements", extends expected
public interface Pet extends IAnimal, ICat {
}

形式参数
如果形式参数是接口类型,那么传递实参的时候,传递的是实现了该接口的子类对象
如果形式参数是抽象类类型,那么传递实参的时候,传递的是继承了该抽象类的子类对象
返回值
如果返回值类型是接口类型,那么返回返回值时,实际上是实现了该接口的子类对象
如果返回值类型是抽象类类型,那么返回返回值时,实际上是继承了该抽象类的子类对象
内部类
特点:
1:内部类可以直接访问外部类的成员,包括私有,
2:外部类要访问内部类的成员,必须创建对象
局部内部类的访问特点
在局部内部类的 成员方法内,可以直接访问外部类的成员变量

// 如何在外部类的外部,创建内部类的对象
// 格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象

A.B b1 = new A().new B();
// 成员内部类
// 正常情况下,我们习惯将 成员内部类 设置为 private,为了安全性
private static class CPU {

}

匿名内部类的代码演示

前提:需要存在一个类或者抽象类,或者接口

格式:
new 类名 或者接口名(){ 重写的方法()};

本质:
是一个继承了类或者实现了接口的 子类 的匿名对象

// 匿名内部类
new IPerson() {
    @Override
    public void eat() {
        // TODO Auto-generated method stub
    }
    @Override
    public void sleep() {
        // TODO Auto-generated method stub
    }
};

好处
好处是缩短了 对象的生命周期,适合在android开发的场景,用完就回收内存

打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP