3继承
3.1继承的实现
1. 基本概念:扩展父类的功能
2. 关键字:extends
3. 格式:
class 子类 extends 父类{ }
package com.dzh.extendsdemo;
/**
* 继承:子类Student,父类People,测试类ExtendsDemo01
*
* @author Daisy
*
*/
class People {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
class Student extends People {
private int score;
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public void tell() {
System.out.println("姓名:" + getName() + ",年龄:" + getAge() + ",成绩:"
+ getScore());
}
}
public class ExtendsDemo01 {
public static void main(String[] args) {
Student s = new Student();
s.setName("Sam");
s.setAge(20);
s.setScore(98);
s.tell();
}
}
3.2继承的限制
1. Java继承只能是单继承,可以多层继承。
class Animal{
//父类
}
class Pig extends Animal{
//子类1
}
class Dog extends Animal{
//子类2
}
class LDog extends Dog{
//多层继承,可以调用Dog类的属性方法,也可以调用Animal类的属性方法
}
2. 子类不能直接访问父类的私有变量,需要通过get/set方法访问。
3.3子类对象的实例化过程
1. 在子类对象实例化之前,先调用父类中的构造方法,之后调用子类构造方法。
class Father {
public Father() {
System.out.print("1父类的构造方法");
}
}
class Son extends Father {
public Son() {
System.out.print("2子类的构造方法");
}
}
public class ExtendsDemo03 {
public static void main(String[] args) {
Son s = new Son();
}
}
3.4 Java方法重写和super关键字
3.4.1 方法的重写
1. 在继承中,重写就是子类定义了和父类同名的方法。
2. 定义:方法名相同,返回值类型相同,参数相同。
class A {
public void tell() {
System.out.println("Hello,我是A。");
}
}
class B extends A {
public void tell() {
System.out.println("Hello,我是B,我重写了方法tell。");
}
}
public class ExtendsDemo04 {
public static void main(String[] args) {
B b = new B();
b.tell();
}
}
子类重写了父类的方法,如果不强行调用,父类的方法不会被调用。
在重写方法时,使用super关键字调用父类的方法。
class B extends A {
public void tell() {
super.tell();//强行调用父类的tell方法
System.out.println("Hello,我是B,我重写了方法tell。");
}
}
3. 重写限制:被子类重写的方法不能拥有比父类的更加严格的访问权限。即重写方法时,访问修饰符可以不一致,但权限不能比父类大。private < default < public ,通常重写方法时修饰符与其一致不做修改。
4. super关键字:
① 强行调用父类的方法进行执行;
② 不一定在重写中使用,也可以表示那些方法是从父类中继承而来的。
3.4.2重写与重载的区别
名称 | 重写(Overriding) | 重载(Overloading) |
定义 | 方法名称、返回值类型,参数全部相同 | 方法名称相同,参数类型或个数不同 |
权限 | 被重写的方法不能比父类拥有更严格的权限 | 没有要求 |
范围 | 发生在继承中 | 同一个类中 |