Java 9 传参予返回值、链式编程、内部类、Object类
传参与返回值
当以后看到一个方法的形参类型是一个类 类型,就返回一个该类的对象
当以后看到一个方法的形参要一个抽象类 类型,就传递一个该类型的子类对象。
当以后看到一个方法的形参要一个接口 类型,就传递一个接口的子类对象。
当以后看到一个方法的返回值类型要一个类 类型,你、就返回一个该类的对象。
当以后看到一个方法的返回值类型要一个抽象类 类型,你要返回一个该类的子类对象。
当以后看到一个方法的返回值类型要一个接口类型,就返回一个该接口的子类对象
链式编程
链式编程的语法风格:当调用完一个方法后,他返回一个对象,那就可以紧接着打点再去调用这个对象所属类中的方法。
-
四种权限修饰符
本类 同一个包下(子类和无关类) 不同包下(子类) 不同包下(无关类)
private Y
默认 Y Y
protected Y Y Y
public Y Y Y Y
内部类
将类A定义到类B中,那么这个类A就称为内部类,类B称为外部类。根据内部类定义位置不用分为:成员内部类和局部内部类。
成员内部类:就是把内部类定义到外部类的成员位置(类中方法外)
局部内部类:就是把内部类定义到外部类的局部位置(方法中)
创建内部类对象:Outer.Inner inner =new Outer().new Inner();
内部类的特点:
内部类可以直接访问外部类的成员,包括私有成员。
外部类不能直接访问内部类的成员。要访问必须创建内部类的对象。
私有的内部类外界无法创建其对象
内部类可以使用static次修饰 创建静态内部类的方法简化了
Outer.Inner inner = new Outer.Inner( );
静态内部类只能访问外部类的静态成员
局部内部类去访问外部类的局部变量,外部类的局部变量必须为一个常量
- 匿名内部类
是局部内部类的一种简写形式
语法格式:new 接口名/类名(){重写方法}
本质:匿名内部类本质上是一个对象,是实现了该接口或者继承了该抽象类的子类对象
对于一个普通的类,我们也可以使用一个匿名的内部类来创建该类的子类对象。
匿名内部类经常可以作为参数来传递
匿名内部类作为返回值返回
- 内部接口
在一个类里面可以定义一个接口。
在外界可以采用匿名内部类的方式,创建出内部接口的子类对象。(利用匿名内部类的方法)
内部接口可以私有,私有后外界无法创建其子类对象
局部内部类访问外部类的局部变量,外部类的这个局部变量必须要为一个常量,JDK1.8之后 ,前面这个final默认就加上了,为什么呢 ?
因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失,还要使用那个变量。
为了让数据还能继续被使用,就用fianl修饰,这样,在堆内存里面存储的其实是一个常量值。
JDK1 .8 之后,final会默认加上,不用手动去加
Object 类
Object 是所有类的顶层父类,所有的类,都是直接或间接继承自他。
hashcode() 哈希码 不同对象的哈希码值是不一样的
Object.java---->Object.class---->当Object.class这个自己吗文件加载的时候JVM就会为字节码文件来创建对象。
这个字节码文件对象,用Class类型来描述。
toString() 打印该对象的地址值,以字符串形式返回