1.抽象类和接口的区别

  • 抽象类继承Object类,接口不继承
  • 抽象类可以有构造方法,接口没有
  • 抽象类可以定义普通成员变量和常量,接口只能定义常量,只能是public static final修饰,不写默认
  • 抽象类可以定义static或final修饰的方法,但是接口不可以
  • 抽象类可以定义普通方法和抽象方法,接口java8之前只能定义抽象方法,修饰符只能为public abstract,不写默认。java8接口中加入了默认方法(非抽象方法),default修饰,可以有方法体。继承的子类不需要实现,可以直接使用
public interface InterfaceCode {
    default void compute(){
        System.out.println("接口中的默认方法");
    }
    void may() ;//默认修饰符为public abstract
}

public class Student implements InterfaceCode  {

    public static void main(String[] args) {
        Student stu = new Student();
        stu.compute();    
    }

    @Override
    public void may() {

    }
}
  • 抽象类单继承,多实现。接口可以继承多个接口

  • 多态:一个类型的引用指向不同的对象,会有不同的实现。java中多态的表现形式为重载,重写,向上造型
  • 一个类的对象可以向上造型为超类类型或其实现的接口类型,这样可以实现多态
  • 强制转换时为了避免出现ClassCastException,使用instanceof关键字判断某个引用指向的对象是否为指定的类型或者指定类型的子类
public interface InterfaceCode {

    default void compute(){
        System.out.println("接口中的默认方法");
    }
}

public class Person implements InterfaceCode {

    public static void main(String[] args) {
        InterfaceCode interfaceCode = new Person();
        Person p = (Person) interfaceCode;//强制转换
        Student stu = (Student) interfaceCode;//强制转换
    }
 }
 
 public class Student extends Person  {

    public static void main(String[] args) {
        Student stu = new Student();
        stu.compute();              
    }
}

2.内部类

  • 一个类可以定义在另一个类的内部,定义在内部的类称为inner,其所在的类称为outer
  • 内部类只服务它所在的外部类,对外部具有不可见性。它可以访问外部类的属性和方法(包括私有的)

forest
0 声望1 粉丝