继承(extends):继承是指从已有的类(父类,基类,超类)中派生出新的类(子类,派生类),继承的作用是为了避免代码的重复,冗余,子类通过继承关系可以获取父类中的所有非private的属性和方法,子类中也可以增加新的变量与函数(对于子类特有的方法,要注意的是一定是子类类型的对象才能调用),每个父类可以有多个子类,但是每个子类只能有一个父类。
-
修饰符
public:可以被所有其他类访问
private:只能被本类访问和修改(类外可以通过set方法与get方法进行存取属性值)
protected:可以被本类及其子类访问,可以跨包访问
default:(缺省修饰符)不能跨包访问 -
继承的格式: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(){
getName()+"正在学习大学课程");
}
}
-
方法重写(覆盖)
条件:(1 )有继承关系的两个类之间
(2 )返回值类型,方法名,参数类型(个数,顺序)完全一样
调用函数时,编译器先从父类中找,再从子类中找是否有该方法的重写,没有时才会调用父类中的方法。(例子见上) -
自动转型:把子类对象的类型定义为父类类型(子类对象的类型可以自动转成父类类型)
优点:假设有一个以父类类型为参数的方法,有多个子类都要用到这种方法,有了自动转型,就不用为每一个子类再去写这么一个方法
缺点:无法调用子类中特有的属性和方法(所以引入了强制转型) -
强制转型:将对象的类型强制转换为子类类型(如果一个对象可以被强制转型那么肯定是在前面某个地方被自动转型过)
上面两个类的主函数
public class Manage{
public static void main(String[] args){
//自动转型
Student st = new UNStudent();//定义对象,通过对象调用类中的属性与方法
st.setName("李雷");
st.study();
//强制转型(这样就可以调用子类中特有的属性和方法了)
UNStudent unst = (UNStudent)st;
unst.printName();
}
}