继承
父类和子类
被继承类被称为父类或超类,由继承得来得类为子类。通过在类的声明是使用extends关键字来创建一个类得子类。子类可以继承父类所有非private得成员。子类可以在子类中修改父类得成员,也可以添加新的成员,但父类是不会改变的。
前面没用继承的类,系统都会默认为java.lang.Object类,也就是说都是它的子类。
子类的每个对象都是父类的对象,反之不然。
在子类的构造方法中可以通过super()来调用父类特定的构造方法。super()会根据参数的个数与类型,执行父类相应的构造方法。
注意:
在java语言的操作中,执行子类的操作时,会先调用父类的无参数的构造方法,目的是为了帮助继承父类的成员完成初始化操作。因此,如果父类中只定义了有参数的构造方法,而子类中又没有super()来调用父类中特定的构造方法,则编译时将发生错误,因为java程序在父类中找不到“没有参数的构造方法”可供执行,则编译的时候会出错。解决办法是在父类加入一个“不做事”的“public Person(){}”。
super()和this()
super()和this()都必须放在第一行,也就是说这俩不能再同一构造方法中。
super()是调用父类的构造方法,this()是调用同类中的构造方法。
super()和this()都对指的是对象,不能存在static环境中。
在子类中访问父类的成员(protected)
格式:super.变量名
super.方法名
将父类的成员声明为protected(保护成员),不是private成员,在子类中可以直接用,我感觉就像在一个类中差不多,如果子类和父类有相同的变量或方法,那就还用super.变量名 super.方法名。
覆盖
子类的方法与父类同名后会覆盖,但父类的方法并没有变,只是覆盖了。
用父类的对象访问子类的成员
创建对象时格式 Person per=new student();覆盖效果仍会有。
注意:通过父类的对象来访问子类的成员时,只限于覆盖的情况发生时。
说明:Person per=new student();这种是向上转型
父类的对象通过强制转换为子类类型再赋值给子类对象的技术为向下转型技术:
格式为:
Student stu=(Student)per;
//per为父类的对象
不可被继承类的成员与最终类
在父类中final修饰的成员变量和成员方法是可以被调用的但不能被修改和覆盖,也就是可以被子类继承。但用final修饰的类是不能被继承的,被称为最终类。
object类
如果某个类没有使用extends继承其他类,默认继承java.lang.Object类的子类。都是简介或直接继承该类。还有一些方法用到再说吧。
抽象类
抽象类的目的是要根据它的格式来创建新的子类,所以抽象类里的抽象方法并没有定义处理数据的方法体。不能根据抽象类来创建对象,只能被继承。
格式:
abstract class 类名{
//一般成员变量和方法(一般都是多余的,因为不能用抽象类产生对象)
//abstract 返回值的数据类型 方法名(参数表);(抽象方法里没有方法体,需要子类覆盖进行实现)
}
注意: 抽象方法中abstract不能和static,private,native,final同时使用。