面向对象--继承 demo(二)

简介: 面向对象--继承 demo(二)

Java继承重写父类方法


重写的前提:需要有继承关系,比如B类继承A类,则B类可以重写A类中的方法!(子类重写父类中的方法)

注意点:


子类所要重写的方法名必须与父类的方法名相同


方法的参数列表也必须一致


方法体不同(就是方法内部的功能不同,相同了就不用重写了)


如A类中有一个无参的方法print()



然后有一个B类继承了A类,并且重写了A类的方法,那么B类所重写方法的方法名也必须为print(),也必须无参



Java子类可以继承父类的所有属性和方法


子类可以继承父类的所有属性和方法,子类可以通过super关键字来调用父类的属性和方法


Demo:

class Person{
    protected int id;
    protected int age;
    public Person(){}
    public Person(int id, int age) {
        this.id = id;
        this.age = age;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
class Teacher extends Person{
    public Teacher(){}
    public Teacher(int id, int age)
    {
        super(id,age);  //调用父类构造器
    }
}
public class Demo{
    public static void main(String[] args) {
        Teacher teacher = new Teacher(1,2);
        //子类可以直接继承父类的方法
        System.out.println(teacher.getId());
        System.out.println(teacher.getAge());
    }
}


运行结果:

运行结果:
1
2


注意:

在java中一个父类可以有多个子类,但一个子类只可以有一个父类

父类类型的引用变量可以指向子类对象,即以下这条语句是合法的

Person person = new Teacher();

子类类型的引用变量不能执行父类对象,即以下这条语句是非法的:

//本条语句是非法的

Teacher teacher = new Person();

Jdk提供了一个类叫Object

Java里所有类默认继承Object类


方法重写:


方法重写:

子类可以重写(也叫覆盖)父类的方法,重写是指在子类中有一个和父类方法名相同且参数表也完全相同的方法,当子类重写父类方法后,子类对象调用方法时会调用自己类里重写的方法

class Person{
    protected int id;
    protected int age;
    public Person(){}
    public Person(int id, int age) {
        this.id = id;
        this.age = age;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
class Teacher extends Person{
    public Teacher(){}
    public Teacher(int id, int age)
    {
        super(id,age);  //调用父类构造器
    }
    @Override
    public int getAge() {
        return 18;
    }
}
public class Demo{
    public static void main(String[] args) {
        Person teacher = new Teacher(1,2);
        //子类可以直接继承父类的方法
        System.out.println(teacher.getId());
        System.out.println(teacher.getAge());
    }
}


解释:

在上面的例子中,Teacher类重写了父类Person的getAge方法,导致Teacher的getAge方法永远返回18(永远18岁,yeah!),然后在main方法中Perosn类型的引用变量teacher指向了Teacher类型的对象,而在调用teacher.getAge()时返回的是18,由此可见在调用方法时不是看引用变量是什么类型,而是看引用变量引用的对象是什么类型





部分内容来源:1

相关文章
|
4月前
|
存储 Java 编译器
【C++】继承 -- 详解(下)
【C++】继承 -- 详解(下)
|
4月前
|
安全 编译器 程序员
【C++】继承 -- 详解(上)
【C++】继承 -- 详解(上)
|
4月前
|
编译器 C语言 C++
【C++专栏】C++入门 | 类和对象 | 类的引入、struct&class的区别、类的定义
【C++专栏】C++入门 | 类和对象 | 类的引入、struct&class的区别、类的定义
25 0
|
4月前
|
编译器 C++
C++进阶--继承
C++进阶--继承
|
4月前
|
Java 编译器
JavaSE学习之--继承和多态(三)
JavaSE学习之--继承和多态(三)
52 0
|
4月前
|
Java 编译器
JavaSE学习之--继承和多态(一)
JavaSE学习之--继承和多态
55 0
|
4月前
|
Java
JavaSE学习之--继承和多态(二)
JavaSE学习之--继承和多态(二)
65 0
|
9月前
ES6学习(十一)—Class 的基本语法和继承
ES6学习(十一)—Class 的基本语法和继承
|
Java C++
面向对象--继承 demo(一)
面向对象--继承 demo(一)
91 1
|
存储 Java DataX
面向对象--封装 demo 练习
面向对象--封装 demo 练习
126 0