一、抽象类
在声明类之前加 abstract关键字。
- 1)抽象类不能创建对象,只能被子类继承后创建;
- 2)抽象类中可以定义抽象方法,也可以不定义。抽象类的抽象方法也以abstract修饰,没有方法体{},只有方法名。
- 3)普通子类实现抽象父类,必须重写,实现抽象父类中的所有抽象方法。抽象子类剋不用。
- 4)abstract 不能与private, static, final一起使用。
- 5)抽象类可以正常创建访问器和构造方法,构造方法不用来创建对象,只用来被子类调用;
- 6)只有抽象类可以创建抽象方法,其他类不能创建
- 7)含有抽象方法的类(包括①直接定义了一个抽象方法;②继承了一个抽象父类,但没有完全实现包含的抽象方法;③实现了一个接口,但没有完全实现接口包含的抽象方法)只能被定义成抽象类。
abstract class tranfictool {
属性
构造方法;
abstract 返回值类型 方法名();
//抽象方法,没有大括号
普通方法;
}
二、 接口
- 1)接口中所有的成员都是public的
- 2)接口不能创建对象,必须用实现类来继承后创建对象,实现类继承后必须实现接口中的所有抽象方法;
- 3)实现类可以实现多个接口的功能,不同接口之间用逗号隔开;
- 4)接口支持多继承,即一个接口可以继承多个接口,继承之后还是接口;
- 5)对于接口中的静态方法,子接口和实现类不能继承
6)多个接口中同名可的区分:
①静态方法用接口名区分;
②默认方法,实现类必须重写;
调用区分:接口名.super.默认方法名()③抽象方法,统一重写实现
抽象类和接口相同:
- 1.都不能创建对象,使用时都需要用实现类来创建对象;
- 2.都可以包含一些抽象方法;
- 3.普通子类和都实现抽象父类和接口中的所有抽象方法;
抽象类和接口的不同
- 1.子类只能继承一个抽象父类,但实现类可以实现多个接口的功能;
- 2。接口自身可以多继承;
interface tranffic {
常量; public static final
抽象方法; public abstract
默认方法;
静态方法;(静态内部类,接口,枚举)
静态内部类型;
}
package day11;
//一个文件中只能有一个public的类或接口
//接口
interface threeElectric {
void threeService(); //public abstract void
}
interface twoElectric {
void twoService(); //public abstract void
}
interface Socket extends threeElectric,twoElectric {
public abstract void socketService(); //相当于C里声明了一个函数
}
class Goods {
}
class IceBox implements threeElectric {
public void threeService() {
System.out.println("冰箱使用三相电通电了");
}
}
class computer extends Goods implements threeElectric , twoElectric {
public void threeService() {
System.out.println("计算机本身通电了");
}
public void twoService() {
System.out.println("外置扩音器通电了");
}
public void Socket(){
System.out.println("插排供电");
}
}
//实现类
public class duotaiTest {
public static void main(String[] args) {
jingdong jd = new jingdong();
jd.webService();
}
}
三、多态
- 多态:父类的引用类型指向了子类的对象;或接口类型的引用类型变量指向了接口类型的变量。
多态:同一个引用类型,使用不同的实例而执行不同操作。
- 包括1)类多态;2)接口多态;3)参数多态;
- 特征:
- 1.方法重写;
- 2.父类引用指向子类对象;接口引用指向实现类。
- 以多态的写法写时,子类特有的方法就用不成了。接口也是。
类型转换
- 1.向上类型转换,直接转:
- 子类–》父类:直接转:// aninal ani = new dog();
- 2.向下转,强制转换:
父类–》子类: 强制类型转化://dog d = (dog) ani; - PS :instanceof运算符:
- if(对象1 instanceof 类1):
- 判断对象1 是否是类1类型,返回boolean类型
- 在强制类型转换之前,通过instanceof运算符检查对象的真是类型,可以避免类型转换异常,从而提高代码的健壮性。