类的继承和转型

<类的继承>
-单继承 多个层次的继承

格式: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调用父类构造方法。

转发

评论

点赞

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值