抽象
一.抽象
1.抽象方法
当一个类的方法被abstract关键字修饰时,该方法称为抽象方法。
抽象方法只能定义在抽象类中
当一个方法被定义为抽象方法后,意味着该方法不会有具体的实现,
而是在抽象类的子类中通过方法重写进行实现。
2.抽象类
抽象方法所在的类,必须被定义为抽象类。
当一个类被定义为抽象类时,他可以包含各种类型的成员,
包括属性、方法等,其中方法又可分为普通方法和抽象方法。
3.定义抽象类和抽象方法
抽象方法语法:
访问修饰符 abstract 返回类型 方法名(参数列表);
抽象类语法:
访问修饰符 abstract 类名{
}
4.普通和抽象的区别
普通方法和抽象方法相比:
抽象方法需要用修饰符abstract修饰,普通方法不需要。
普通方法有方法体,抽象方法没有。
普通类和抽象类相比:
抽象类需要用修饰符abstract修饰,普通类不需要。
普通类可以被实例化,抽象类不能被实例化。
二.使用抽象
1.优势
抽象类中已经实现的方法可以被其子类使用,使代码可以被复用;
同时提供了抽象方法,保证了子类具有自身的独特性。
案例
接口
一.接口
和抽象类不同,定义接口使用interface修饰符,访问修饰符只能是public,且可选。
实现接口使用implements关键字。
接口成员只能是全局常量和公共的抽象方法。
接口和类、抽象类是一个层次的概念,命名规则相同。
修饰符如果是public,则该接口在整个项目中可见。如果省略修饰符,该接口只在当前包中可见。
接口中可以定义常量,不能定义变量。接口中的常量必须在定义时指定初识值。
接口中的属性都默认用“public static final”修饰,即接口中的属性都是全局静态常量。
接口中的所有方法都是抽象方法,接口中的方法都默认为public。
和抽象类一样,接口同样不能实例化,接口中不能有构造方法。
接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。
类只能继承一个父类,但可以通过implements实现多个接口。
一个类必须实现接口的全部方法,否则必须定义为抽象类。
若一个类在继承父类的同时又实现了多个接口,extends必须位于implements之前。
二.使用接口
定义接口语法格式:
public interface 接口名{
//接口成员
}
实现接口语法格式:
public 类名 implements 接口名{
实现方法
普通方法
}
接口本身也可以继承接口
接口继承接口的语法格式:
修饰符 interface 接口名 extends 父接口1,父接口2,…{
常量定义
方法定义
}
实现多个接口的语法格式:
class 类名 extends 父类名 implements 接口1,接口2,…{
类的成员
}
接口的约定:
标准,约定规定就可以用接口来做
一般接口是 has a 的关系用接口
区别is a 是继承的关系
一般记住一句话:
有属性和方法用抽象方法
要是没有用接口作为属性
面向对象设计原则
1.摘取代码中的变化行为,形成接口
2.多用组合,少用继承
3.针对接口编程,不依赖于具体实现
4.针对扩展开放,针对改变关闭