继承的基本作用是:代码的复用。默认所有的类都继承与Object类
一、概念:
继承是java面向对象编程的基石,继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
public class Person {
public void run() {
System.out.println("任何人都可以跑。。。");
}
}
class Student extends Person{
private void eat() {
System.out.println("学生正在吃。。。。");
}
public static void main(String[] args) {
Student student = new Student();
student.run();
student.eat();
}
}
student.run(): student对象通过内存地址的调用,找到student实例,发现student实例当中没有run()方法,于是便去父类当中寻找,进而调用父类当中的run()方法。
student.eat():student对象通过内存地址的调用,找到student实例,发现student实例当中有eat()方法,直接调用。
二、super关键字
super 关键字有两个用途:一是调用超类的方法,二是调用超类的构造器。调用构造器语句的时候只能作为另一个构造器的第一条语句出现。
三、明确方法重载和方法重写
1.方法重载
//方法的重载
public void getRun() {
System.out.println("所有小猫都能跑。。。。");
}
//一个方法的签名是由方法名称以及参数列表所组成
//方法的重载是指在一个类当中有相同的方法名不同的参数列表
public void getRun(int s) {
System.out.println("所有小猫都能跑。。。。"+s);
}
public static void main(String[] args) {
Cat cat = new Cat();
cat.getRun();
}
2.方法重写
在有些时候,子类当中需要调用父类当中的方法,但是父类当中的方法对子类来说并不一定适用。这个时候我们就需要使用到方法的覆盖。例如
public class Person {
public void run() {
System.out.println("任何人都可以跑。。。");
}
}
class Student extends Person{
public void run() {
System.out.println("这个学生在跑。。。");
}
private void eat() {
System.out.println("学生正在吃。。。。");
}
public static void main(String[] args) {
Student student = new Student();
student.run();
student.eat();
}
}
student.run(): student对象通过内存地址的调用,找到student实例,发现student实例当中有run()方法,直接调用
重载和重写的区别
重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序
不同,方法返回值和访问修饰符可以不同,发生在编译时。
重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父
类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类
方法访问修饰符为 private 则子类就不能重写该方法。
四、继承层次
java只支持单继承,一个类只能继承一个类,不能同时继承多个类
继承并不限于一个层次。
public class Person {
public void run() {
System.out.println("任何人都可以跑。。。");
}
}
class Student extends Person{
public void run() {
super.run();
System.out.println("这个学生在跑。。。");
}
private void eat() {
System.out.println("学生正在吃。。。。");
}
public static void main(String[] args) {
Student student = new Student();
student.run();
student.eat();
}
}
class XiaoMing extends Student{
}
class XiaoHong extends Student{
}
java虽然只支持单继承,但是一个类也可以间接继承其他类。由一个公共超类派生出来的所有类的集合被称为继承层次,在继承层次当中,从某个特定的类到其祖先的路径被称为继承链,但是一定要注意java是单继承的。