1.继承就是基于已存在的类构造一个新类,继承已存在的类就能复用类的方法和属性,并且能够添加新的方法和属性。也就是子类和父类
2.一个父类可以拥有多个子类,一个子类只允许有一个父类
3.用extends关键字表示一个类继承自另一个类
1 class A{ } //父类或基类
2 class B extends A { } //B是A的子类
3 class C extends B { } //C是B的子类,可以直接复用A的属性和方法
4.一切类的祖先是Object类
5.如果子类中的一个方法,其名称、返回类型以及参数列表和父类中的某个方法一样,那么可以说子类的方法重写了父类的方法
6.重写父类方法时不可降低方法的访问权限
7.重写了父类方法后要调用被重写的方法,可在子类方法中使用super.被重写的方法()
8.子类不继承父类的构造方法,子类的构造方法必须调用父类的构造方法,如果子类没有显式的调用父类构造方法,系统默认调用无参数的构造方法,相当于省略了super();语句
9.子类构造方法中使用super()调用父类构造方法,不必须作为子类构造方法的第一条语句
10.子类在实例化时先调用父类构造方法,后调用子类构造方法
1 //父类
2 public class Inherit1 {
3 private String name;//私有属性
4 private String sex;
5 //根据属性生成构造方法
6 public Inherit1(String name, String sex) {
7 this.name = name;
8 this.sex = sex;
9 }
10 public void hello(){
11 System.out.println("我叫:"+name+"我是:"+sex+"孩!");
12 }
13 }
14 //子类
15 public class Inherit2 extends Inherit1{
16 public Inherit2(String name,String sex) {
17 //调用父类的构造方法
18 super(name,sex);
19 }
20 public void hello(){
21 System.out.println("我是新来的!");
22 super.hello();//调用父类方法
23 }
24 }
11.在实例化子类对象时,先调用父类构造方法,在调用子类构造方法;(就好比要先有父亲才会有儿子),可从以下例子看出
1 public class Person { 2 private String name; 3 private int age; 4 public Person() { 5 System.out.println("父类构造方法"); 6 } 7 public String getName() { //取得name属性 8 return name; 9 } 10 public void setName(String name) { //设置name属性 11 this.name = name; 12 } 13 public int getAge() { 14 return age; 15 } 16 public void setAge(int age) { 17 this.age = age; 18 } 19 } 20 21 public class Student extends Person{ 22 private String school; 23 public Student() { 24 System.out.println("子类构造方法"); 25 } 26 public String getSchool() { 27 return school; 28 } 29 public void setSchool(String school) { 30 this.school = school; 31 } 32 33 public class Demo { 34 public static void main(String[] args) { 35 Student stu = new Student(); 36 stu.setName("张三"); 37 stu.setAge(23); 38 stu.setSchool("云南大学"); 39 System.out.println("姓名:"+stu.getName()+"年龄:"+stu.getAge()+"学校:"+stu.getSchool()); 40 } 41 }
运行结果:
父类构造方法
子类构造方法
姓名:张三年龄:23学校:云南大学
方法的覆写
所谓方法的覆写就是在子类中定义了与父类同名的方法,但是在方法覆写是必须考虑权限问题,即被子类覆写的方法不能有比父类更加严格的访问权限
(即:private、default、public;这三种访问权限的大小关系private<default<public)
所以父类中定义的方法是public,子类覆写的方法也必须是public
1 class Person{ 2 void print(){ //定义一个默认访问权限的方法 3 System.out.println("父亲的方法"); 4 } 5 } 6 class Student extends Person{ 7 public void print() { //覆写父类方法,扩大访问权限public 8 System.out.println("儿子覆写过的方法"); 9 } 10 } 11 public class Demo{ 12 public static void main(String[] args) { 13 new Student().print(); 14 } 15 }
运行结果:
儿子覆写过的方法
与方法的覆写还有一个相似的是属性的覆盖
1 class Person{
2 public String info = "ABC";
3 }
4 class Student extends Person{
5 public String info = "UFO";
6 public void print() {
7 System.out.println("父类中的属性:"+super.info);//访问父类中的info属性
8 System.out.println("子类中的属性:"+this.info);//访问子类中的info属性
9 }
10 }
11 public class Demo{
12 public static void main(String[] args) {
13 new Student().print();
14 }
15 }
运行结果:
父类中的属性:ABC
子类中的属性:UFO