Java-高级类特性(抽象类+接口+内部类)

抽象类:

  • 定义:如果一个类中没有包含足够的信息来描述一个具体的对象,这样的类就是抽象类。
  • 抽象类代码实现举例:
abstract class Car{
    public String type;
    //定义类属性
    public abstract int seats();
    public abstract void way();
    //定义抽象方法
}
  • 抽象类使用规则:
  1. abstract修饰符可以修饰类和方法,用abstract修饰的类称为抽象类,相应的修饰方法为抽象方法(一种不完整方法,只含有一个声明,没有方法体,也就是没有具体实现)。
  2. 抽象类不能实例化对象,只能声明引用对象(举例说明如下)
Car car;  合法表示
Car car=new Car();  非法表示
  1. 抽象方法必须用abstract修饰,含有抽象类的方法必须为声明为抽象类,抽象类可以不含抽象方法。
  2. 作用机制:通过子类继承使用(抽象类实现代码的重用和规划作用)。子类继承抽象类的时候必须实现抽象类中的所有抽象方法,否则也必须用abstract修饰。
  • 完整抽象类使用(代码实现):
public class Project extends Car {
    public Project(){
        type="属性重写";
    }
    @Override
    public int seats() {
        return 5;
    }
    @Override
    public void way() {
        System.out.println("抽象方法实现体!");
    }
    public static void main(String[] args) {
        Car car = new Project();
        String a=car.type;
        System.out.println(a);
        System.out.println(car.seats());
        car.way();
    }
}
abstract class Car{
    public String type;
    public abstract int seats();
    public abstract void way();
}

接口:

  • 定义:接口是一种规范和标准,用于约束类的行为。
  1. Java语言中存在的结构,有特定的语法和结构。
  2. 一个类所具有的方法特征集合,指一种逻辑上的抽象。
  3. 接口的引用可以指向实现类对象,从而发生多态,本身不可实例化。

----------------------------------接口是一系列方法的声明,是一些方法特征的集合。-----------------------------------------

  • 定义规则:
[访问修饰符] interface 接口名 [extends 父接口列表] {
	[public][static][final] 常量名;
	[public][abstract] <方法返回类型> 方法名(参数列表);
}
//代码实现
interface Goods{
    public  int a=6;
    public static final int b=8;
    public abstract void way();
}

  • 接口的多重实现:
定义两个接口类:Goods  Action
class One implements Goods,Action{
//    类体省略
}

内部类:

  • Java语言支持嵌套类定义,可以将一个类定义在其他类的内部,及内部类。
  • 代码实现:
interface Action{
    public String mile=null;
    public void go();
}
class People{
    public class Student{
        public void way(){
            class Well{
//                Well为"内部类--局部内部类"
//                可以像普通类一样添加属性方法
            }
            new Action(){
//                {}括号后是匿名内部类
                @Override
                public void go() {
                    System.out.println("Let' go !");
                }
            };
        }
        public static class Quite{
//            Quite为"内部类--静态内部类"
        }
    }
}
  • 对于new Action的理解:
    因为接口不能实例化对象,仍需使用该接口,在new Action(); 前实现该接口方法,所以{}内为没有名字的类,即匿名类,用该类实现接口方法。
  • 分类:
  1. 实例内部类:定义在类的内部,方法或代码块外部,没有static修饰的类。
  2. 静态内部类:定义在类的内部,方法或代码块外部,利用static修饰的类。
  3. 局部内部类:定义在方法或代码块内部的类。
  • 总结:
    当类与接口或者接口与接口发生方法命名冲突时,使用内部类来实现是一种比较好的解决方案。用接口配合内部类才能实现真正的多继承。

你可能感兴趣的:(Java核心,java,开发语言,jvm)