语雀原文链接
文章目录
- 1、继承定义
- 2、构造方法
- 3、变量隐藏
- 4、方法重写
- 5、父子类的访问修饰符
1、继承定义
- 继承是类与类之间的一种关系
- 继承的好处
- 子类拥有父类的所有属性和丰富(非private)
- 减少代码冗余,实现代码重用
- 继承的语法:子类 extends 父类{}
- 单根继承:一个类只能有一个父类;但一个父类可以有多个子类
- 子类会继承父类的属性+方法(有条件的)
public class Animal{public String name;/*** 父类默认构造方法*/public Animal(){System.out.println("Animal()");}protected void desc(){System.out.println("我的名字叫:"+name);}
}public class Dog extends Animal{}public class Main {public static void main(String[] aaa) {Animal animal = new Animal();animal.name = "tom";animal.desc();// 子类会集成父类的属性+方法Dog dog = new Dog();dog.name = "jack";dog.desc();}
}
2、构造方法
- 子类实例化时,先调用父类的默认构造方法,再调用子类的构造方法
public class Animal{public String name;/*** 父类默认构造方法*/public Animal(){System.out.println("Animal()");}protected void desc(){System.out.println("我的名字叫:"+name);}
}public class Dog extends Animal{public Dog() {System.out.println("Dog()");}
}public class Main {public static void main(String[] aaa) {// Animal()// Dog()// 我的名字叫:jackDog dog = new Dog();dog.name = "jack";dog.desc();}
}
- super:在子类的构造方法中调用父类的构造方法,用在子类的构造方法里,调用父类里的构造方法,super语句一定要处于整个构造方法的第一行
public class Animal{public String name;public int age;/*** 父类默认构造方法*/public Animal(){System.out.println("Animal()");}public Animal(int age){System.out.println("Animal(int age)");this.age = age;}public Animal(String name, int age){System.out.println("Animal(String name, int age)");this.name = name;this.age = age;}protected void desc(){System.out.println("我的名字叫:"+name);}
}public class Dog extends Animal{public Dog() {System.out.println("Dog()");}public Dog(String name) {// 对super的调用必须是构造器中的第一个语句
// int a = 1;super(name,12);this.name = name;}
}public class Main {public static void main(String[] aaa) {// Animal(String name, int age)// 我的名字叫:jackDog dog1 = new Dog("jack");dog1.desc();}
}
3、变量隐藏
- 如果子类和父类中都定义了一个同类型同名的属性,在子类中使用的就是子类的属性,如果想用父类的属性,则需要使用super
public class Animal{public String name;/*** 父类默认构造方法*/public Animal(){System.out.println("Animal()");}public void desc(){System.out.println("我的名字叫:"+name);}
}public class Dog extends Animal{private String name;public Dog() {System.out.println("Dog()");}public Dog(String name) {this.name = name;}public void desc(){System.out.println("我的名字叫:"+name);}public void test(){System.out.println(name);System.out.println(super.name);desc();super.desc();}
}public class Main {public static void main(String[] aaa) {// Animal()// jack// null// 我的名字叫:jack// 我的名字叫:nullDog dog1 = new Dog("jack");dog1.test();}
}
4、方法重写
- 条件:子类里的方法名、形参、返回类型与父类里的方法完全一样
5、父子类的访问修饰符
- private修饰的属性不能被子类继承,public、protected、默认 这三修饰符修饰的可以被继承
public class Animal{private String name;
}public class Dog extends Animal{}public class Main {public static void main(String[] aaa) {Dog dog1 = new Dog();// 报错 name 在 Animal 中是 private 访问控制dog1.name ="jack";}
}