1./*
继承(extends):
让类和类之间产生关系,子父类关系.
A.继承的好处
提高了代码的复用性
提高了代码的维护性
让类和类产生了关系,是多态的前提
B.继承的弊端
类的耦合性增强了
开发的原则:
高内聚,低耦合
耦合:类和类之间的关系
内聚:自己完成某件事的能力
*/
class Demo_Extends {
public static void main(String[] args) {
Cat c = new Cat();
c.legs = 4;
c.colour = "red";
c.sleep();
c.eat();
System.out.println("小猫有" + c.legs + "腿颜色是" + c.colour);
}
}
//动物类
class Animal {
String colour;
int legs;
}
//猫类 继承父类 动物类的属性
class Cat extends Animal {
public void sleep() {
System.out.println("小猫喜欢睡觉");
}
public void eat () {
System.out.println("小猫喜欢吃饭");
}
}
//狗类 继承父类 动物类的属性
class Dog extends Animal {
public void sleep() {
System.out.println("小狗喜欢睡觉");
}
public void eat () {
System.out.println("小狗喜欢吃饭");
}
}
2./*
继承(extends)特点:
A.JAVA只支持单继承,不支持多继承(一个儿子一个爹)
JAVA支持多层继承(继承体系)
如果想用这个体系的所有功能用最底层的类创建对象
如果想看这个体系的公共性能,看最顶层的类
*/
class Demo_Extends {
public static void main(String[] args) {
DemoC c = new DemoC();
c.show();
c.method();
c.print();
}
}
class DemoA {
public void show() {
System.out.println("DemoA");
}
}
class DemoB extends DemoA {
public void method() {
System.out.println("DemoB");
}
}
class DemoC extends DemoB {
public void print() {
System.out.println("DemoC");
}
}
3.继承(extends)注意事项:
A.子类只能继承父类所有的非私有的成员(成员方法和成员变量)
B.子类不能继承父类的构造方法,但是可以通过super关键字去访问父类的构造方法
C.不要为了部分的功能而去继承
/*
this和super的区别
A.this:当前对象的引用,谁来调用我,我就代表谁
super:代表当前对象父类的引用
B.this和super的使用区别
成员变量调用的区别:
this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
super.成员变量 调用父类的成员变量
调用构造方法:
this : 调用本类的构造方法
super: 调用父类的构造方法
调用成员方法:
this.成员方法: 调用本类的成员方法,调用父类的成员方法
super.成员方法: 调用父类的成员方法
子类中所以的构造方法默认都会访问父类中空参数的构造方法,
因为子类会继承父类中的数据,可能还会使用父类的数据,所以,
子类初始化之前,一定要先完成父类数据的初始化.
当父类中没有无参构造方法的时候用super();或者this()解决;语句必须出现在构造方法的第一条语句上
实际上,每一个构造方法的第一条语句默认都是:super(); Object类最顶层的父类.
*/
class Demo_Extends {
public static void main(String[] args) {
Son s = new Son();
}
}
class Father {
public Father() {
System.out.println("父类中的构造方法");
}
}
class Son extends Father {
public Son() {
System.out.println("子类中的构造方法");
}
}
4.class Demo_Extends {
public static void main(String[] args) {
Son s = new Son();
System.out.println("----------------");
Son s1 = new Son("张三",23);
}
}
class Father {
private String name;
private int age;
public Father() {
System.out.println("Father空参构造");
}
public Father(String name,int age) {
this.name = name;
this.age = age;
System.out.println("Father有参构造");
}
public void setName() {
this.name = name;
}
public String getName() {
return name;
}
public void setAge() {
this.age = age;
}
public int getAge() {
return age;
}
}
class Son extends Father {
public Son() {
System.out.println("son空参构造");
}
public Son(String name,int age) {
System.out.println("son有参构造");
}
}