Override:复写(在继承的子类中对父类的成员方法不合适,推翻它,重写方法体)又叫覆盖或者重写
作用范围在有父子关系的两个类中,在父类和子类中各有一个函数,这两个函数的定义,函数名,参数列表和返回值完全相同
super.Introduce();
子类中调用父类的成员函数
例子:
class Person
{
int age;
String name;
void Introduce()
{
System.out.println("我的名字是" + name + ";" + "我的年龄是:" + age);
}
}
class Student extends Person
{
String address;
void Introduce()
{
super.Introduce();
//System.out.println("我的名字是" + name + ";" + "我的年龄是:" + age);
System.out.println("我家的地址是" + address);
}
}
class Test
{
public static void main(String args[]){
Student s = new Student();
s.name = "zhangsan";
s.age = 20;
s.address = "beijing";
s.Introduce();
Person p = new Person();
p.age = 10;
p.name = "xiaoxi";
p.Introduce();
}
}
结果:
对象的转型:
对象的向上转型:将子类的对象赋值给父类的引用注意要是继承关系
Student s = new Student();
Person p = s;
例子:
class Person
{
int age;
String name;
void Introduce()
{
System.out.println("我的名字是" + name + ";" + "我的年龄是:" + age);
}
}
class Student extends Person
{
String address;
void Introduce()
{
super.Introduce();
//System.out.println("我的名字是" + name + ";" + "我的年龄是:" + age);
System.out.println("我家的地址是" + address);
}
}
class Test
{
public static void main(String args[]){
Student s = new Student();
Person p = new Person();
p = s;
}
}
结果:编译没错误,语法通过
应用:
class Person
{
int age;
String name;
void Introduce()
{
System.out.println("我的名字是" + name + ";" + "我的年龄是:" + age);
}
}
class Student extends Person
{
String address;
void Study()
{
System.out.println("我正在学习");
}
void Introduce()
{
super.Introduce();
//System.out.println("我的名字是" + name + ";" + "我的年龄是:" + age);
System.out.println("我家的地址是" + address);
}
}
class Test
{
public static void main(String args[]){
Student s = new Student();
Person p = new Person();
p = s;
p.name = "张三";
p.age = 18;
p.address = "深圳";//error
p.Introduce();//right 因为Person类里有这个成员方法
p.Strudy();//error
}
}
结果:
结论:
而一个引用能使用哪些成员变量和成员函数取决于这个引用的类型。
p.address
是会找不到的 因为Person类里没有成员变量address。
在结论一的基础上,一个引用调用的是哪一个方法取决于所指向的对象
p.Introduce()
调用子类Student对象里的Introduce()
结果是
我的名字是zhangsan;我的年龄是20
我家的地址是null
向上转型一定会成功
向下转型:
前提是向上转型然后再向下转型
不可以直接用生成的父类对象把他强制转换成子类对象
Person p1 = new Person();
Student s1 = (Studnet)p1;