Java学习总结:9

继承

继承性是面向对象的第二大主要特征,而继承性要解决的就是代码重用的问题,利用继承性可以从已有的类继续派生出新的子类,也可以利用子类扩展出更多的操作功能。

继承的实现

继承的格式

class 子类 extends 父类 {}

子类实际上是将父类定义得更加具体化得一种手段

说明:
1.对于extends而言,应该翻译为扩充,但是为了理解方便,统一将其称为继承;
2.子类又称为派生类;
3.父类又被称为超类(Super Class)。

继承的实现:

class Person{
    private String name;
    private int age;
    public void setName(String name){
        this.name=name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public String getName(){
        return this.name;
    }
    public int getAge(){
        return this.age;
    }
}
class Student extends Person{   //Student类继承了Person类
    private String school;  //子类扩充的属性
    public void setSchool(String school){   //扩充的方法
        this.school=school;
    }
    public String getSchool(){     //扩充的方法
        return this.school;
    }
}
public class Test1_1_3_3 {
    public static void main(String args[]){
        Student stu=new Student();  //实例化的是子类
        stu.setName("小关");  //Person类定义
        stu.setAge(19);
        stu.setSchool("西安邮电大学");    //Student类扩充方法
        System.out.println("姓名:"+stu.getName()+",年龄:"+stu.getAge()+",学校:"+stu.getSchool());
    }
}
//结果:
//姓名:小关,年龄:19,学校:西安邮电大学

继承的限制

一.Java不允许多重继承,但是允许多层继承,Java存在单继承局限。

错误的继承:(多重继承)

class A{}
class B{}
class C extends A,B{}	//一个子类继承两个父类

多层继承:

class A{}
class B extends A{}	//B类继承A类
class C extends B{}	//C类继承B类

二.子类在继承父类时,严格来讲会继承父类中的全部操作,但是对于所有的私有操作属于隐式继承,而所有的非私有操作属于显示继承。

class A{
    private String msg;
    public void setMsg(String msg){
        this.msg=msg;
    }
    public String getMsg(){
        return this.msg;
    }
}
class B extends A{//继承自A类
}
public class Test1_1_3_4 {
    public static void main(String args[]){
        B b=new B();
        b.setMsg("HelloWorld");
        System.out.println(b.getMsg());
    }
}
//结果:
//HelloWorld

由上可知在B类里面一定存在msg属性,并且此属性是通过父类继承而来的。
但是在B类里面不能针对msg属性进行直接访问,因为它在A类中属于私有声明,只能利用setter或getter方法间接地进行私有属性的访问。

三.在子类对象构造前一定会默认调用父类构造(默认使用无参结构),以保证父类的对象先实例化,子类对象后实例化。

1.父类提供无参的构造方法:

class A{
    public A(){		//父类提供的无参构造方法
        System.out.println("A类的构造方法");
    }
}
class B extends A{//继承自A类
    public B(){
        System.out.println("B类的构造方法");
    }
}
public class Test1_1_3_4 {
    public static void main(String args[]){
        new B();
    }
}
//结果:
//A类的构造方法
//B类的构造方法

2.父类不提供无参构造方法:

class A{
    public A(String title){     //父类提供的有参构造方法
        System.out.println("A类的构造方法"+title);
    }
}
class B extends A{//继承自A类
    public B(String title){
        super(title);   //明确调用父类构造,否则将出现编译错误
        System.out.println("B类的构造方法");
    }
}
public class Test1_1_3_4 {
    public static void main(String args[]){
        new B("!!!");   //实例化子类对象
    }
}
//结果:
//A类的构造方法!!!
//B类的构造方法
发布了49 篇原创文章 · 获赞 25 · 访问量 1540

猜你喜欢

转载自blog.csdn.net/weixin_45784666/article/details/104266605