关于继承
在我们使用JAVA进行类的定义时,常常会遇到出现两种类大部分属性相同,但存在一定区别的情况,如定义两种类:学生和大学生、书和练习册等等,在这种情况下,重复的编程段会造成代码的冗余,因此如果能利用现有的数据类型对其进行“复制”,再加以修改和完善,会更加节省时间。
“继承”正是由此设计,但继承并不完全是“复制”。若称原始类为父类(基础类,超类),修改后的“复制”类为子类(继承类),则当父类发生变化时,子类中继承了父类的那部分也会发生改变。但为了趋近现实,我们不必定义两个完全一样的类,所以为了区分衍生类与基础类,我们可以:
- 为衍生类添加新函数(功能)—能满足大部分情况的需要;
- 为衍生类函数定义一个新定义(如:方法重写)。
如何继承
继承的格式为:
public class 子类 extends 父类 {
}
以学生和大学生为例:
先建立一个学生类
public class Student{
private String name;
//定义set方法,初始化名字属性
public void setName(String n){
name = n;
}
//定义get方法,获取属性的方法
public String getName(){
return name;
}
public void study(){
System.out.println(name+"正在学习!");
}
}
再建立一个继承了学生类的大学生类
public class UNStudent extends Student{
public void printName(){
System.out.println("名字:"+getName());
}
//方法重写(覆盖)
public void study(){
System.out.println("子类重写父类的方法!");
}
}
方法重写
方法重写的两个基本条件为:
- 有继承关系的两个类之间;
- 返回值类型,方法名,参数类型(个数,顺序)完全一样。
主函数`
public class Manage {
public static void main(String[] args) {
//自动转型
UNStudent st = new UNStudent();
st.setName("张三");
st.study();
//强制转型
UNStudent unst = (UNStudent)st;
unst.printName();
}
自动转型
由于子类与父类有相同的类型,这是自动定义的,在实际操作中自动转型的代码不必加入。(强制转型除外)
强制转型
在进行强制转型前一定要出现自动转型。
补充:修饰符
- public: 可以任何位置的其他类访问
- private: 只能被本类访问和修改(类外可以通过set方法与get方法进行存取属性值)
- protected: 可以被本类及其子类访问,可以跨包访问
- default:(缺省修饰符)不能跨包访问