当一个类与另一个类具有共同的属性时,我们可以借助于继承的思想来进行问题的解决。
Emplee.java
public class Emplee {
String name;
int num;
int age;
public void work(){
System.out.println(this.name+"好好工作.........");
}
public void study(){
System.out.println(this.name+"好好学习.........");
}
}
Teacher.java
public class Teacher extends Emplee {
int age=23;
public void teach(){
System.out.println(this.age);
System.out.println(super.age);
System.out.println(super.name+"好好教书的职责");
}
}
Demo01Test.java
package Weeks02.days06_qianfeng.Test1;
public class Demo01Test {
public static void main(String[] args) {
Teacher teacher=new Teacher();
teacher.name="张三";
teacher.teach();
}
}
this关键字
this关键字时用在调用本类中的变量和成员方法。
格式:
this.成员变量;
this.成员方法;
继承:其实就是子类继承父类的属性和行为,使子类对象具有和父类相同的属性、相同的行为。子类可以直接 访问父类中的非私有的属性和行为。
通过extnds关键字来进行父类的继承
例如:
public class Animal{
String name;
int age;
.......
public void eat(){
}
}
public class Dog extends Animal{
String name;
int age;
public void eat(){
System.out.println(this.name);
System.out.println(this.age);
}
}
如果在继承之后,成员变量没有重名,则可以正常的进行访问,如果出现了重名的情况,那么需要使用super关键字进行访问,和之前的this关键字一样。
注意:子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用 super 关键字,修饰 父类成员变量,类似于之前学过的 this 。
格式:
super.父类成员变量名;
注意代码如下:
public class Emplee {
private String name;
private int num;
private int age;
public void work(){
System.out.println(this.name+"好好工作.........");
}
public void study(){
System.out.println(this.name+"好好学习.........");
}
}
public class Teacher extends Emplee {
int age=23;
public void teach(){
System.out.println(this.age);
System.out.println(super.age);
System.out.println(super.name+"好好教书的职责");
}
}
public class Demo01Test {
public static void main(String[] args) {
Teacher teacher=new Teacher();
teacher.name="张三";
teacher.teach();
}
}
注意:
父类中的成员变量是非私有的,子类中可以直接访问。若父类中的成员变量私有了,子类是不能 直接访问的。通常编码时,我们遵循封装的原则,使用private修饰成员变量,那么如何访问父类的私有成员 变量呢?对!可以在父类中提供公共的getXxx方法和setXxx方法。
public class Emplee {
private String name;
private int num;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void work(){
System.out.println(this.name+"好好工作.........");
}
public void study(){
System.out.println(this.name+"好好学习.........");
}
public class Teacher extends Emplee {
int age=23;
public void teach(){
System.out.println(this.age);
System.out.println(super.getAge());
System.out.println(super.getName()+"好好教书的职责");
}
}
public class Demo01Test {
public static void main(String[] args) {
Teacher teacher=new Teacher();
teacher.setName("张三");
teacher.teach();
}
}
方法的重写:
如果子类和父类中出现了同名的方法,那么此时就应该属于方法的重写。
方法重写 :子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效 果,也称为重写或者复写。声明不变,重新实现。
class Fu {
public void show() {
System.out.println("Fu show");
}
}
class Zi extends Fu {
//子类重写了父类的show方法
public void show() {
System.out.println("Zi show");
}
}
public class ExtendsDemo05{
public static void main(String[] args) {
Zi z = new Zi(); // 子类中有show方法,只执行重写后的show方法
z.show(); // Zi show
}
}
注意事项:
1. 子类方法覆盖父类方法,必须要保证权限大于等于父类权限。
2. 子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样。