继承 extends
继承的关系 子类和父类
如子类为讲师和助教 父类为员工,父类包含子类的某些属性
格式
/*父类的格式
public class 父类名称{
}*/
public class Fu {
int num=20;
public void methFu() {
System.out.println("父类方法执行了");
}
}
/*子类的格式
public class 子类名称 extends{
//..
}*/
public class Zi extends Fu{
int num=4;
public void methZi() {
System.out.println("子类方法执行");
}
}
//main函数
public class hash {
public static void main(String[] asgs)
{
Fu fu=new Fu();
Zi zi=new Zi();
System.out.println(fu.num);
System.out.println(zi.num);
zi.methZi();
zi.methFu();
fu.methFu();
}
}
//运行结果:
/*20
4
子类方法执行
父类方法执行了
父类方法执行了
*/
子类可以访问父类,父类不能访问子类。父亲不知道儿子是谁,儿子知道父亲是谁
在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式:
- 直接通过子类对象访问成员变量:
等号左边是谁, 就优先用谁,没有则向上找。 - 间接通过成员方法访问成员变量:
该方法属于谁,就优先用谁,没有则向上找。
区分方法重名的方法
变量 | 使用方法 |
---|---|
局部变量: | 直接写 |
本类的成员变量: | this.成员变量名 |
父类的成员变量: | super.成员变量名 |
这三者重名
//Fu
package demo02;
public class Fu {
int num=10;
}
//Zi
package demo02;
public class Zi extends Fu{
int num=20;
public void method() {
int num =30;
System.out.println(num);//直接写 方法成员变量
System.out.println(this.num);//本类 类的成员变量
System.out.println(super.num);//父类 父类的成员变量
}
}
主程序
package demo02;
public class ExtendsFild {
public static void main(String[] asgs) {
Zi zi= new Zi();
zi.method();
}
}
运行结果
30
20
10
结果说明了:
继承中方法的覆盖重写
方法覆盖重写的注意事项:
-
必须保证父子类之间方法的名称相同,参数列表也相同。
@Override:写在方法前面,用来检测是不是有效的正确覆盖重写。
这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。 -
子类方法的返回值必须小于等于父类方法的返回值范围。
String
前提: java. lang. object类是所有类的公共最高父类(祖宗类),java. lang. String就是object的子类。 -
子类方法的权限必须大于等于父类方法的权限修饰符.
提示:public>protected>(default)—什么都不写 >private
继承特点:
- 子类构造方法中有一个隐含的"super();"调用所以先调用的父类后调用的子类.
- 可以通过super关键字在子类构造调用父类重载构造.