1. 接口

作为一种约定,约定某些类必须有接口中定义的方法,方法在类中重写实现。

接口定义与类相似,把class 换成 interface。但是接口中没有属性,只有空方法(没有方法体)。

public interface A{
    public void aHello(); // 空方法
}

public interface B{
    public void bHello(); // 空方法
}


public class ABClass implements A, B{
    
    @Override
    public void ahello(){
        sout("a hello");
    }
    
    @Override
    public void bHello(){
        sout("b hello");
    }
}

2. 对象与引用类型转换

1)子类转父类

Parent p = new Parent(); Child c = new Child(); p = c; // 把c 当 p来用。

2) 父类转子类,需强制转换,能否转换成功需要看父类引用的到底是哪个对象。失败时抛出ClassCastException异常。

c = (Parent) p;

3) 没有继承关系的2个类,互相转换会失败(即使继承了同一个父类)。

4)实现类转接口: 

interface A; class AClass; AClass aClass = new AClass(); A a = aClass;

5) 接口转实现类: 强制转换。

6) instanceof: 判断某对象是属是某类型或某类型的子类。

 

3. 方法重写

子类重新实现父类的对象方法。又称覆盖,override。不需要加@Override

 

4. 多态

操作符:+算法运算,字符串连接

类:父类引用指向不同子类对象,调用方法时有不同表现。

 

5. 隐藏:子类覆盖父类的类方法, 在子类中重新实现相同的类方法。

6. super: 相当于父类的名称。可直接调用父类的构造方法及对象方法

7. Object: 所有类的父类。声明类时默认继承。

toString(): 返回当前对象的字符串表达

finalize(): JVM调用,用于垃圾回收。当对象没有引用指向时。

equals(): 判断2个对象内容是否相同。 public boolean equals(Object o){ if ( o instance of Type){ Type t = (Type) o; return this.attr == t.attr; } return false; }

==: 不是Object的方法,用于判断2个引用是否指向同1个对象。

hashCode(): 返回对象的hash值。

线程同步: wait(), notify(), notifyAll()

getClass(): 返回一个对象的类对象

 

8. final

1) 修饰类时,表示类不能被继承

2) 修饰方法时,表示方法不能被重写

3) 修饰基本类型变量,变量只能赋值1次

4) 引用,引用只能指向对象一次

5) 常量, 可以公开直接访问不会变化的值。 public static final int age = 100;

 

9. 抽象类

类中有空方法(没有实现体)称为抽象方法,有抽象方法时需声明为抽象类。抽象使用abstract修饰。public abstract class, public abstract void function().

抽象类不能直接实例化。

抽象类:子类只能继承1个抽象类;可定义public/protected/package/private,静态/非静态属性,final/非final属性。

接口:子类可以继承多个接口,属性只能是public 静态 final形式的。默认为public static final。

抽象类和接口都可以有实体方法。

 

10. 内部类

1) 非静态内部类: 以外部类实例化为基础。

public class A{ class B{ } }

A a = new A(); B b = a.new B();

2) 静态内部类: 不以外部类实例化为基础。

public class A{ static class B {} }

A.B b = new A.B();

3) 匿名类, 声明时(含抽象类、接口)即实例化,没有命名。使用外部的局部变量必须修饰为final

public abstract class A{ }

A a = new A(){ //A内部的abstract方法}; //必须以;结尾

4) 本地类: 有名字匿名类

public abstract class A{}

class B extends A {}

B b = new B();

 

11. 默认方法

在接口中实现具体方法,用default修饰。即 default public void method(){}