------------------------------------------------------------------------------------------------- 对象的上转型对象 前提:B是A的子类或者间接子类,用子类B创建一个对象,并把这个对象的引用放到类A声明的对象中时,如: A a; B b = new B(); a = b; 或者 A a; a = new B(); 以上两种方式创建的a就是子类对象b的上转型对象。 注意:父类对象的引用不可以直接赋值给子类对象,但子类对象的引用可以赋值给父类对象,即就是上转型对象。
对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原子类对象的一些新增添的属性和功能。 上转型对象的特点: 上转型对象不是父类创建的对象,而是子类对象的“简化”形态, 它不关心子类新增添的功能,只关心子类继承和重写的功能,即: 上转型对象不可以调用子类自己增添的新变量和新方法,只能调用子类继承的成员变量和隐藏的成员变量,以及子类继承的方法和重写的方法。 要让子类对象恢复对所有属性和方法的调用,可以将上转型对象再强转为一个子类对象,如:B b = (B)a;
使用关键字abstract修饰的类称为抽象类。如:abstract class {...} 抽象类只能被继承,继承它的子类重写它的抽象方法,完善它。 1.抽象类中可以有抽象方法,也可以有非抽象的方法,其中抽象方法只允许声明,不允许实现。 注意:不允许使用final和abstract同时修饰一个类,因为抽象类要在继承中被子类重写以变的完善,如果 使用final修饰,那么就不允许子类继承了,也就永远不会得到完善。 含抽象方法的类一定为抽象类,但抽象类中不一定必须包含抽象方法。 2.抽象类不能new对象,抽象类的非抽象子类必须重写它的全部抽象方法,如果没有重写全部的抽象方法,那么该子类依然为抽象类。 抽象子类继承抽象父类,它可以重写父类的抽象方法,也可以继承这个抽象方法。
---------------------------------------------------------------------------------------------------------------------- 接口: 一个类可以实现多个接口,但只能继承一个父类。 接口中包含常量定义和方法定义,并且只进行方法的声明,不允许提供方法的实现,如下: interface Jiekou{ final int MAX = 1000; void add();//接口中的方法默认使用public和abstract同时修饰 float sum(float x,float y); } 同时实现多个接口: class A extends B implements C,D,E 接口之间可以相互继承,如果父类实现了某个接口,那么子类也就自然的实现了该接口。