继承的概念
继承是子类继承父类非private的属性和方法,当子类继承父类后,就具有了父类非private的属性和方法。
继承的语法
class 父类
class 子类 extends 父类
继承的好处
子类继承父类实现了代码的复用,同时子类也可以声明自己的方法,拓展了功能。
/**
*
*/
package com.kai.tian;
/**
* @author 18797
*
*/
class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
public void eat() {
System.out.println(name + "正在吃饭");
}
public void sleep() {
System.out.println(name + "正在睡觉");
}
}
class Student extends Person {
private long id;
/**
* @return the id
*/
public long getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(long id) {
this.id = id;
}
public Student(long id) {
this.id = id;
}
public void id() {
System.out.println("id为:" + id);
}
}
public class ExtendsTest {
public static void main(String[] args) {
Student stu = new Student(1234);
stu.setAge(20);
stu.setName("小明");
System.out.println(stu.getName());
System.out.println(stu.getAge());
System.out.println(stu.getId());
stu.sleep();
stu.eat();
stu.id();
}
}
继承的类型
Java不支持多继承,但支持多重继承。所有的类都是Java.lang.Object类的子类。
子类实例化过程
子类是不继承父类的构造器的,它只是调用(隐式或显式)。
如果父类的构造器带有参数,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适合的构造器。
如果父类的构造器没有参数,则在子类的构造器中可以不使用super调用父类的构造器,系统会自动调用父类的无参构造器。
也就是说,子类无论如何都会调用父类的构造器。
super与this关键字
super关键字:通过super关键字可以实现对父类属性和方法的引用和调用。
this关键字:指向当前对象的引用。