----------------继承-----------------------
Public class Men { //父类定义
private string name ;
Public void setname()
{
name = “sx”;
}
}
//Sx(书訢)属于人的子类对吧,所以Sx将men继承,属于men的子类
//继承是用关键词extends 表示Sx是Men的子类
//
Public class Sx extends Men //子类的定义
{
}
//如果此时在主函数中实例化Sx的对象,如以下代码
public static viod main(String [] args)//子类的实例化与调用父类的函数
{
Sx sx=new Sx();
Sx.setname(); //这里并不会显示错误,原因是Sx是Men的子类可以调用Men中的方法
}
----------------------------重写overwrite---------------------------
因为子类的特征不同,就像书訢和别人有不同对啊,所以有他自己的特点
如:
Public class Sx extends Men
{
Public void setname()
{
name=”sxsx”; //这里进行了子类的重写
}
}
//如此之前父类中的名字是sx,现在重写变成sxsx,就是这个原理
//重写只改变方法的内容(即函数的内容)但是函数的类型,参数类型,数量不可改变。
//注意重载与重写
----------------------自动转型upcast -------------------
//哈哈所谓的代码中小范围的阶级跃迁
之前定义了子类Sx父类Men
而在后面的代码中实例化时候是这样的
Sx sx=new Sx();
其实这样也是可以的
Men sx=new Sx();
原因是什么呢?其实代码可以这样写
Sx sx; //这相当于我们定义一个变量int a;同理
sx=new Sx(); //Sx是一个类,new Sx实例化一个对象,并将它赋值(可能这个说法不太准确)给sx
那么同理,用父类中进行定义一个sx,并用子类的进行实例化赋值,当然也是可以的啊。
一个子类的对象你当然可以说它也是一个父类的对象咯,就像你说一个高中生 ,它当然也是一个学生咯。(是不是言简意赅,深刻发省2333)
需要注意的一点是,刚刚讲了自动转型,和类似我们定义变量的一样
当实例化一个对象之后,调用的是什么函数呢?
答案很简单,因为之前讲了new Sx,进行赋值,那么实际上还是用了子类的功能,所以调用的当然就是子类的啦
接下来总结一下
A a =new A; 调用方法 a.f() 这个实际上就是实例化对象和调用函数
A a=new B; 调用方法 a.f()但是前提就是B必须是A的子类,并调用函数。
重写只是函数内容改变,其他都不改变,要区分重写与重载
自动转型,子变父,调用还是子类的