内部类
内部类是类中的五大成分之一(成员变量、方法、构造器、代码块、内部类)
如果一个类定义在另一个类的内部,这个类就是内部类。
public class Car{
// 内部类
public class Engine{
}
}
成员内部类
就是定义在一个类中成员位置的类,在内部类中也可以定义成员属性和方法
public class Outer {
// 成员内部类
public class Inner {
// 成员属性和方法
}
}
创建对象的格式
外部类名.内部类名 对象名 = new 外部类(...).new 内部类(...);
Outer.Inner in = new Outer().new Inner();
使用特点及注意: 1、成员内部类中可以定义实例成员,静态成员 (注意: 静态成员从JDK16开始支持) 2、成员内部类中的实例方法中,可以直接访问外部类的实例成员,静态成员 3、如果内部和外部类出现了重名的成员,可以通过(外部类名.this.xxx) 强行访问外部类的成员
静态内部类
public class Outer{ public static class Inner{ } }
创建对象的格式: 外部类名.内部类名 对象名 = new 外部类(..).内部类(..); Outer.Inner in = new Outer().Inner(); 特点: 1. 可以直接访问外部类的静态成员 2. 不可以直接访问外部类的实例成员
局部内部类
局部内部类是定义在方法中、代码块中、构造器等执行体中
public class Test {
public static void main(String[] args) {
}
public static void go(){
class A{
}
abstract class B{
}
interface C{
}
}
}
匿名内部类
new 类或接口(参数值…) {
类体(一般是方法重写);
};
new Animal(){
@Override
public void cry() {
}
};
泛型
定义类、接口、方法时,同时声明的类型变量(如:<E>) ,称为泛型。
public class ArrayList<E>{
. . .
}
泛型类
修饰符 class 类名<类型变量,类型变量,…> {
}
public class ArrayList<E>{
. . .
}
泛型接口
修饰符 interface 接口名<类型变量,类型变量,…> {
}
public interface A<E>{
. . .
}
通配符
就是 “?” ,可以在“使用泛型”的时候代表一切类型; E T K V 是在定义泛型的时候使用。
泛型的上下限:
泛型上限: ? extends Car: ? 能接收的必须是Car或者其子类 。
泛型下限: ? super Car : ? 能接收的必须是Car或者其父类。
Object中toString方法的作用是什么?存在的意义是什么?
基本作用:返回对象的字符串形式。
存在的意义:让子类重写,以便返回子类对象的内容。
Object中equals方法的作用是什么?存在的意义是什么?
基本作用:默认是比较两个对象的地址是否相等。
存在的意义:让子类重写,以便用于比较对象的内容是否相同。
什么是浅克隆?
拷贝出的新对象,与原对象中的数据一模一样(引用类型属性拷贝的是地址)
什么是深克隆?
对象中基本类型的数据直接拷贝。
对象中的字符串数据拷贝的还是地址。
对象中包含的其他对象,不会拷贝地址,会创建新对象。
自动装箱:基本数据类型可以自动转换为包装类型。
自动拆箱:包装类型可以自动转换为基本数据类型。