fgxl

导航

JAVA基础 - 继承

继承,即按照现有类的类型来创建新类,是复用的实现方式之一。

继承类可以访问基类的protected成员,但不能访问private成员。

一个例子就可以说明。

基类:

@Data
public class BaseModel {
    protected String testField;
}

i继承类:

@Data
public class ExtendModel extends  BaseModel {
    private String selfField;

    @Override  //BaseModel使用protected
    public String toString() {
        return "ExtendModel{" +
                "testField='" + testField + '\'' +
                ", selfField='" + selfField + '\'' +
                '}';
    }

//    @Override  BaseModel使用private
//    public String toString() {
//        return "ExtendModel{" +
//                "testField='" + super.getTestField() + '\'' +
//                ", selfField='" + selfField + '\'' +
//                '}';
//    }
}

测试:

public class ExtendTest {

public static void main(String[] args) {
ExtendModel e = new ExtendModel();
// e.setTestField("test");
e.testField = "test";
e.setSelfField("self");
System.out.println(e);
}
}

输出结果:ExtendModel{testField='test', selfField='self'}           ----->   默认继承类的toString方法不包含基类字段

 

对继承类来讲,对象既可以作为自己本身的类型使用,也可以作为它的基类类型使用,即向上转型。基类可以接受发送给导出类的任何消息,因为二者有着完全相同的接口,从导出类向上转型,不需要知道正在处理的对象的确切类型。

向上转型是安全的,而向下转型则因为导出类拥有基类不具有的接口则无法保证安全性。解决方法之一就是在转型的时候通过加括弧形式进行类型转换,但是依然不能保证一定能成功,因为java会对所有的转型进行检查(运行时类型识别,RTTI)。如果不是能够转型的类型,则会报类转型异常(ClassCastException)。

BaseModel b = e;
ExtendModel e2 = (ExtendModel) b;

 

posted on 2021-02-25 20:45  fgxl  阅读(62)  评论(0编辑  收藏  举报