继承
继承可以理解为一个对象从另一个对象获取属性的过程
1.通过 extends 关键字可以申明一个类是继承另外一个类而来的
2.类的继承是单一继承,一个子类只能拥有一个父类;
3.子类可以继承父类所有非私有成员属性和方法;
4.父类不可以访问子类的特有成员。
5.子类可以通过方法重写改变从父类继承的方法(除父类构造方法外)。
6.父类的构造方法不能被子类继承和重写。
// 以下分别定义和封装了三个成员属性以及成员属性的getter/setter方法、构造方法(带参和无参)、成员方法
package com.imcoc.animal;
public class Animal {
private String name; // 私有属性
private int month; // 私有属性
private String pries; // 私有属性
public Animal() {}
public Animal(String name, int month) {}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void run() {
System.out.println(this.name+"在跑动");
}
}
1.子类通过 extends 关键字继承父类Animal的非私有成员属性和方法
public class Dogs extends Animal { // 代码块}
2.一个子类只能有一个父类,但是一个父类可以有多个子类
//子类拥有自己的一些成员属性和方法
public class Dogs extends Animal {
private double weight;
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public void eat() {
System.out.println(this.getName() + this.weight + "斤重,在吃狗粮");
}
public void other() {
System.out.println(this.getName() + "是" + this.getBreeds() + "品种");
}
}
3.子类可以访问父类的非私有成员属性和方法
package com.imcoc.test;
import com.imcoc.animal.Dogs;
public class Test {
public static void main(String[] args){
Dogs dogs = new Dogs();
dogs.setName("花花"); // 可以访问父类的setName()方法 注意这里是setName()方法不是name 成员属性
dogs.setWeight(2);
dogs.setBreeds("中华田园犬"); // 可以访问父类的setBreeds()方法
dogs.run(); // 可以访问父类的方法
dogs.other();
}
}
4.父类不可以访问子类的成员属性和方法
Animal animal = new Animal();
animal.eat(); // 这样写报错的
以下只能.出的方法和属性都是Animal父类自己的
父类不可以访问子类的成员属性和方法.png
5.方法重写
a.以下要素必须与父类继承的方法完全一致:返回值类型、方法名、参数类型、顺序、个数;
b.要定义在有继承关系的子类中 *
c.方法的访问修饰符在一定范围内允许与变化,但重写的方法访问修饰符范围要>=父类访问修饰符*
d.与方法的参数名无关
public class Dogs extends Animal {
public void run() { //子类重写了父类的run 方法
System.out.println(this.getName()+"在睡觉");
}
}
测试打印输出
public class Test {
public static void main(String[] args){
Dogs dogs = new Dogs();
dogs.setName("花花");
dogs.run(); // 此时打印输出不再是父类定义的“花花在跑动” 而是“花花在睡觉”
}
}
6.虽然重写仅限制在方法层面,但是在子类中也是可以定义与父类重名的属性
// 在父类中定义 character 成员属性
public String character="调皮";
// 在子类中重写 character
public String character="温顺";
// 测试
System.out.println(dogs.character); // 打印结果 温顺
网友评论