1.类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物,对象是抽象概念的具体实例。
2.只有构造方法(构造器)不写任何返回类型也不写void。
3.a静态方法,b是非静态方法,a方法中不能直接调用b方法,但是b方法中可以直接调用a方法.
public static void a(){
//b();报错
}
public void b(){
a();
}
4.在同一个类中,静态方法内也不能直接访问到类中的非静态属性。
5.类中有多个方法,有着相同的方法名,但是方法的参数各不相同,这种情况被称为方法的重载。
6.方法重载必须满足一下条件:
1)方法名相同
2)参数列表不同(参数的类型、个数、顺序的不同)
3)方法的返回值可以不同
7.类和类之间的继承是单继承,接口和接口之间,也可以继承,并且是多继承。
8.父类中的构造器是不能被子类继承的,但是子类的构造器中,会隐式的调用父类中的无参构造器(默认使用super关键字)。
9.方法重写只存在于子类和父类(包括直接父类和间接父类)之间。在同一个类中方法只能被重载,不能被重写。
10.重写的语法:
- 方法名必须相同
- 参数列表必须相同
- 访问控制修饰符可以被扩大,但是不能被缩小 public protected default private
- 抛出异常类型的范围可以被缩小,但是不能被扩大
ClassNotFoundException —> Exception - 返回类型可以相同,也可以不同,如果不同的话,子类重写后的方法返回类型必须是父类方法返回类型的子类型
- 例如:父类方法的返回类型是Person,子类重写后的返回类可以是Person也可以是Person的子类型
11.子类继承父类,调用a方法,如果a方法在子类中没有重写,那么就是调用的是子类继承父类的a方法,如果重写了,那么调用的就是重写之后的方法。
12.编译看左边,运行看右边。
13.System.out.println(x instanceof Y);
该代码能否编译通过,主要是看声明变量x的类型和Y是否存在子父类的关系。有子父类关系就编译通过,没有子父类关系就是编译报错。
14.System.out.println(x instanceof Y);
输出结果是true还是false,主要是看变量x所指向的对象实际类型是不是Y类型的"子类型"。
15.类型转换中的问题
//编译通过 运行没问题
Object o = new Student();
Person p = (Person)o;
//编译通过,运行报错
Object o = new Teacher();
Student s = (Student)o;
X x = (X)o;
运行是否报错,主要是变量o所指向对象的实际类型,是不是X类型的子类型,如果不是则运行就会报错。