Java(15)继承(面向对象特征二)

2021-03-30 15:25

阅读:484

标签:无法访问   ogr   允许   image   private   imm   修饰符   setname   自动   

继承(面向对象特征二)

Java使用extends关键字来实现继承

package test;

public class Person {
    private int age;
    private String name;
    public void fun1(){
        System.out.println(this.name+" "+this.age);
    }

    public int getAge() {
        return age;
    }
    public String getName(){
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }
}
//下面让Student继承Person类
class Student extends Person{
    public static void main(String[] args) {
        Student a=new Student();
        a.setName("Jimmy");
        a.setAge(18);
        System.out.println(a.getName()+" : "+a.getAge());
        //我们可以看到,Student并没有自己创建name,age,但是从Person类继承过来了
    }
}
//执行结果为Jimmy : 18

在OOP(object-oriented programming面向对象编程)的术语中,我们把Person称为超类(super class),父类(parent class),基类(base class),把Student称为子类(subclass),扩展类(extended class)

继承树

JAVA的每一个类只允许拥有一个父类,任何类,除了object,都会继承一个类。因此,除了object没有父类,Java中任何一个类有且只有一个父类。

技术图片

在继承中使用protected

子类可以从父类继承属性和方法,但如果父类的属性和方法用private修饰时,则子类无法访问父类的东西,这就使得继承的作用被削弱了,如果想让子类可以访问父类,可以将父类中的private非访问修饰符改为protected

  • 案例:使用private,访问父类失败。
package test;

public class Person{
    private int age=10;
}
class Student extends Person{
    public void test(){
        System.out.println(age);
        //age此处会显示错误:age‘ has private access in ‘test.Person‘
    }
}
  • 案例:使用protected,访问父类成功。
//----------------------方法1----------------------------
package test;

public class Person{
    protected int age=10;
}
class Student extends Person{
    public void test(){
        System.out.println(age);
    }
}
class RunTest{
    public static void main(String[] args) {
        Student a =new Student();
        a.test();
    }
}

//----------------------方法2----------------------------
/*
  注意上面是用public修饰的test() 方法来访问父类属性,
  如果使用static的main方法来访问,则需要new一个Person对象出来才行
 */
package test;

public class Person{
    protected int age=10;
}
class Student extends Person{
    public static void main(String[] args) {
        Person b=new Person();
        System.out.println(b.age);
    }
}

在继承中使用super关键字

如果父类没有默认的构造方法,子类就必须显式调用super()并给出参数以便让编译器定位到父类的一个合适的构造方法。

//详情请查看 super关键字 一级标题里的内容

这里还顺带引出了另一个问题:即子类不会继承任何父类的构造方法。子类默认的构造方法是编译器自动生成的,不是继承的。

单继承与多继承

Java只支持单继承,多层继承,不允许多重继承。就是说,一个子类只能有一个父类。

技术图片

Java(15)继承(面向对象特征二)

标签:无法访问   ogr   允许   image   private   imm   修饰符   setname   自动   

原文地址:https://www.cnblogs.com/jimmy888/p/13580890.html


评论


亲,登录后才可以留言!