<类的继承>
-单继承 多个层次的继承
格式:public class 子类(派生类)extends 父类(基类,超类){ }
eg.定义大学生类(子类) 学生类(父类)
-->public class UNStudent extends Student{
public void printName(){
System.out.println("学生名字"+getName()); ……@1
}
}
->在main中创建大学生对象
public static void main(String[] args){
UNstudent st=new UNStudent();
st.setName("李四"); ……@2
}
|private:私有属性
1.定义私有属性
eg.private String name;
2.定义set方法,设置属性
eg.public void setName(String name){
this.name=name;
}
3.定义get方法,获取属性
eg.public String getName(){
return name;
}
-子类会继承父类中的所有属性和方法,但私有属性和方法不能直接使用(-->用set,get方法)
eg1.@1
eg2.@2
|方法重写(覆盖)
-1.有继承关系的两个类之间 2.返回值类型,方法名,参数类型(个数,顺序)完全一样
调用父类的方法:super——表示当前类的父类对象
*this——表示本类对象
eg.public void study(){
super.study(); //1.保留父类原有的功能
//2.重写方法后新增功能
System.out.println("...");
}
以上是关于类的继承的要点,与之相关的:接口的实现如下
格式:public class 接口的实现类名 implements 接口名1,接口名2,,,{ }
注意与类的继承不同的是:接口可以多继承;必须重写接口中的所有抽象方法
然后,我们来讨论转型——两种类型:向上转型(自动转型)和向下转型(强制转型)
首先,向上转型是由子类向父类转型,为什么称作自动转型?这个很好理解:比如张三是大学生,那他自然就是学生这个父类
它的格式(父类名 对象名=new 子类名();)
eg.Student st=new UNStudent();
或者将原有的对象直接转型的话
eg.Student stu=unst;//unst是UNStudent对象
那么自动转型后,该对象是否还能像从前一样调用子类中的方法呢?当然是不行的。比如张三现在的身份是学生,你怎么能够让他参加大学生的考试?也就是说,自动转型后就不可以再调用子类中独特的方法了。但也有例外,当碰到了在子类中重写的方法时,它会调用重写后的方法。通俗的说,调用方法时,只在父类的范围内查找方法,如果该方法在子类中重写,才到子类中调用这个方法。
关于自动转型,这里更要提的是它的实际运用——在调用函数时,形式参数是父类对象,但实际参数也可以是它的子类对象,因为子类对象在这里会被自动转型成父类,再传给函数。
eg.public static void ststudy(Student s){
s.study();
}
UNStudent unst=new UNStudent();
->ststudy(unst);
上例:第一,unst可以作实参传给ststudy方法
第二,ststudy调用的study方法是在UNStudent类种重写后的方法
还有很多例子,比如在之前PixelUI类中为什么可以把PixelMouse类的对象传给这两个方法:
PixelMouse mouse=new PixelMouse();
jbu.addActionListener(mouse);
jf.addMouseListener(mouse);
我们看到这两个方法的参数类型:
public void addActionListener(ActionListener l)
public void addMouseListener(MouseListener l)
而我们PixelMouse类继承了接口(PixelMouse implements ActionListener,MouseListener)
所以是因为我们给了它们子类对象,而被自动转型了
接着,我们再来讨论向下转型,即强制转型,反之,是父类对象转换成子类。但注意,该对象必须是经过了向上转型,才能进行向下转型
eg.UNStudent unst=(UNStudent)st;
当我们调用方法时,则与自动转型相反,即先在子类范围内查找该方法,若使用到了父类中的方法,才会去父类中调用。
补充:
父类的构造方法,必须在子类中调用。
原因在于,再调用子类构造器时,系统会调用父类构造器。如果父类中有无参构造器,则在子类的无参构造器中,系统会自动调用父类构造器。(若父类中没有无参构造器,则会报错)但如果要继承父类的有参构造器,则需要super自行调用。
父类如下:
子类:
子类中用super调用父类构造方法。
转发
评论
点赞