1、多态
1.1多态的概念
1.父类引用指向子类对象
2.一对象多种状态
1.2前提
有继承或者实现
1.3代码形式
父类类型 变量名=new 子类类名();
1.4成员访问的特点(重点掌握!!)
成员变量 :编译,运行都看左边(父类)
成员方法:编译看左边,运行看右边;
优点缺点
优点:提高代码的扩展性,一个父类参数可以接受多个子类
缺点:不能使用子类特有的方法,想使用子类方法需要强制转换,向下转型;可以用instanof 先判断,防止不是父类报错
2、内部类
2.1类型 :
成员内部类 局部内部类
2.2注意
内部类可以访问,外部类的成员变量,包括private都可以访问
想变量名相同可以用 外部类名.this.变量名;
A.this.a;
class Outside{ private int a = 100; class Inside{ private int a = 200; public void show(){ int a = 300; System.out.println(__**Outside.this.a**_______);//100 System.out.println(____**Inner.this.a**_______);//200 Ssytem.out.println(_____a______);//300 } } }
3、匿名内部类
new 父类或接口(){
重写父类或接口的方法;
};
前提是有继承或者实现
等于直接用父类或者接口实现了一个类,但是没有名字,直接重写了父类或者接口的方法,
4、lambda表达式
4.1概述:
lambda是java在jdk8开始新增的一种语法,这种语法允许我们在调用带有接口类型的形参的方法时,使用lambda作为方法的实参使用;(lambda是需要根据调用的场景自动进行推导的)
4.2使用限制:
必须方法的形参是有接口类型,并且接口中有且只有一个抽象方法
4.3语法
(参数列表)->{方法体;return 返回值;}
lambda必须作为方法的实参使用;
4.4省略规则
4.5和内部类区别
4.6 lambda表达式就是 调用方法中是一个接口类型,由于接口没有实现方法,所以在调用的时候实现了这个类,lambda 就可以看作这个类的实例化,也就是方法中的实参,debug可以看到先的构造过程,调用方法执行接口的方法时,再真正使用lambda中的方法体,
(参数列表)->{方法体,有返回值时,加return;}
调用方法(lambda);
被调用的方法体中的形参是接口类型
接口中一个抽象方法