1.继承
1.1概念和格式1.2继承的利弊1.3继承中变量的访问特点1.4继承构造方法访问特点1.5继承中成员方法的访问特点1.6继承内存图1.7方法重写(1.5既视感)1.8继承注意事项
方法重写:继承:
1.继承 1.1概念和格式概述:继承是面向对象三大特征之一。可以使子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。
格式:
public class 子类名 extends 父类名{..}
1.2继承的利弊
提高复用性(多个类相同的成员可以放到同一个类中)和维护性(修改一处即可)类的耦合增强,削弱子类独立性什么时候能用?
存在关系 is a的时候:苹果是水果,猫是动物,
1.3继承中变量的访问特点
子类局部变量>子类成员变量>父类成员变量>没有报错就近原则?super(父类的引用)
1.4继承构造方法访问特点
子类中所有的构造方法的访问都会默认访问父类无参构造方法
原因:
子类会继承父类的数据,可能还会用到父类的数据。所以子类初始化前会先初始化父类每一个子类的默认构造方法的第一条语句默认都是:super()
如果父类没有无参构造方法,只有带参构造方法,怎么办?
子类构造方法第一句用super关键字去显示调用父类的带参构造方法父类写一个无参构造方法 (推荐) 1.5继承中成员方法的访问特点
通过子类访问一个方法和访问变量一样(就近原则)
子类成员范围找>父类成员范围>报错
1.6继承内存图方法内的局部变量在栈内存中
卧槽花点时间看看
1.7方法重写(1.5既视感)概述:
子类中出现和父类中一模一样的方法声明
应用:
当子类需要父类的功能,而功能主体子类有自己特有的内容,可以重写父类的方法,这样,沿袭父类的功能又定义子类的特有内容
eg:手机类 新手机类
写代码的时候用@override然后在下面写方法重写(一个注释,检查方法重写声明的正确性)
1.8继承注意事项 方法重写:私有方法(privat)不能被重写(private 不能被继承)子类方法权限不能更低(public>默认>private) 继承:
java只支持单继承,不能继承多个可以支持多层继承
package teacher;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package teacher;
public class Teacher extends Person {
public Teacher() {
}
public Teacher(String name, int age) {
super(name, age);
}
public void teach() {
System.out.println("用爱教育每个学生!");
}
}
package teacher;
public class PersonDemo {
public static void main(String[] args) {
Teacher t1 = new Teacher();
t1.setName("文天圣");
t1.setAge(20);
System.out.print(t1.getName()+","+t1.getAge()+"岁,");
t1.teach();//文天圣,20岁,用爱教育每个学生!
Teacher t2 = new Teacher("陈彦池",100);
System.out.print(t2.getName()+","+t2.getAge()+"岁,");
t2.teach();//陈彦池,100岁,用爱教育每个学生!
}
}
小结: 上述代码,teacher继承person,但是不能继承父类private的成员变量,所以需要用父类的方法进行赋值。
猫狗案例:
package catanddog;
public class Animal {
private String name;
private int age;
public Animal() {
}
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package catanddog;
import groovyjarjarantlr4.v4.codegen.model.SrcOp;
public class Cat extends Animal {
public Cat() {
}
public Cat(String name, int age) {
super(name, age);
}
public void catchMouse() {
System.out.println("猫抓老鼠");
}
}
package catanddog;
public class Dog extends Animal {
public Dog() {
}
public Dog(String name, int age) {
super(name, age);
}
public void lookDoor() {
System.out.println("狗看门");
}
}
package catanddog;
public class AnimalDemo {
public static void main(String[] args) {
Cat c1 = new Cat();
c1.setName("汤姆");
c1.setAge(20);
System.out.println(c1.getName() + "," + c1.getAge());
c1.catchMouse();
Cat c2 = new Cat("加菲", 30);
System.out.println(c2.getName() + "," + c2.getAge());
c2.catchMouse();
Dog d1 = new Dog();//同理
}
}



