1、抽象类
抽象类不能被实例化(不能new对象),它的作用是提供给其他类进行继承。
关键字abstract
修饰类,类为抽象类,不能被实例化;
修饰方法,方法为抽象方法,只有方法的签名,没有方法体;
如果父类中定义了一个抽象方法,子类中必须重写此方法。
抽象类特点:
1)抽象类不能实例化,即抽象类不能创建对象;
2)子类继承(extends)抽象类,必须实现该抽象类当中所有的抽象方法(除非子类也是一个抽象类);如果父类的父类也是抽象类,那么需要重写所有的抽象方法。
3)抽象类,可以包含抽象方法和非抽象方法(普通方法)以及变量;
4)如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误;
5)抽象类中也可以不包含抽象方法
6)抽象类可以有父类,但是父类必须有一个无参的构造函数,否则,抽象类必须声明一个与父类相同的有参构造方法;
2、接口
接口是一种比抽象类还抽象的类型,是抽象方法和常量值的定义的集合声明接口关键字interface
实现接口关键字implements
接口的特点︰
1)用interface关键字声明接口;
2)子类实现接口,并重写接口的所有的方法;
3)接口只有方法的签名,没有普通方法,也没有变量,可以有常量,不能被修改;
4)接口不能自身实例化,接口的实现类可以实例化;
5)接口可以实现多个,而父类只有一个(单亲继承),而且必须先继承(extends)父类再实现(implements)接口,重写接口所有方法;
6)接口中的方法都是抽象方法,默认方法前边public abstract
public interface a {
public void a();
void b();
}
7)接口可以继承多个接口
接口的优点:
1)解决Java中的单亲继承问题(继承只能单亲继承,但是一个类可以实现多个接口)
2)接口可以实现并行开发
3)便于重构
3、类型转换
向上转型:子类对象向父类转型
1)将一个【父类的引用】指向一个子类对象,称为向上转型;此时自动进行类型转换(即可以理解为创建了一个父类类型的子类对象)
2)通过父类的引用调用的方法,是子类重写或继承父类的方法,而不是父类原本的方法,更不是子类特有的方法;
3)通过父类的引用无法调用子类特有的方法,即向上转型的子类对象只能调用继承自父类的方法,而不能调用子类独有的方法,方法数量缩小,安全
向下转型:父类对象向子类转型
父类对象向子类转换需要强制类型转换;
1)将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型
instanceof:判断某一个对象是不是属于某一类型
boolean a= dog instanceof Dog;