JavaSE基础之继承

Posted 楓与楪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE基础之继承相关的知识,希望对你有一定的参考价值。

一.概念

      父子概念的继承:圆继承于图形,圆是子概念(子类型 Sub class)图形是父类型(Super Class也叫超类),继承在语法方面的好处:子类共享了父类的属性和方法的定义,子类复用了父类的属性和方法,节省了代码。

1)继承是is a :“是”我中的一种,一种所属关系。

2)子类型对象可以赋值给父类型变量(多态的一种形式),变量是代词,父类型代词可以引用子类型东西。

3)继承只能是单继承,即直接继承,而非间接继承。因为多继承容易带来安全隐患,当多个父类中定义了相同功能,当功能内容不同时,子类无法确定要运行哪一个。

4)父类不能强转成子类,会造型异常!子类向父类转化是隐式的。

5)只有变量的类型定义的属性和方法才能被访问!见下例。

6)重写遵循所谓“运行期绑定”,即在运行的时候根据引用变量指向的实际对象类型调用方法。

      7)引用类型变量的类型转换 instanceof

public static void main(String[] args) {
        Circle c = new Circle(3,4,5);        
Rect r = new Rect(3,4,5,6); Shape s = c;
Shape s1 = r; //Circle x = s;//编译错误,父类型变量不能赋值给子类型 Circle x = (Circle)s;//正常执行 //Circle y = (Circle)s1;//运行异常,类型转换异常 //instaceof instace:实例 of:的 //instaceof 运算 检查变量引用的对象的类型是否兼容 //s引用的是圆对象,s instanceof Circle 检查s引用的对象是否是Circle类型的实例! System.out.println(s instanceof Circle);//true System.out.println(s1 instanceof Circle);//false test(c);
test(r);
}
public static void test(Shape s){//多态的参数 //if(s instanceof Circle)保护了(Circle)s不会出现异常 if(s instanceof Circle){//实现了安全的类型转换 Circle c = (Circle) s;
System.out.println("这是一个圆, 面积"+c.area());
}
if(s instanceof Rect){ Rect r = (Rect) s;
System.out.println("这是一个矩形, 面积"+r.area());
}
}

8)继承时候对象的创建过程

①Java首先递归加载所有类搭配方法区。②分配父子类型的内存(实例变量)。③递归调用构造器。

9)重写方法与重载方法的调用规则

    

 

10)属性绑定到变量的类型,由变量类型决定访问哪个属性;方法动态绑定到对象,由对象的类型决定访问哪个方法。(强转对方法动态绑定到对象无影响,因为强转的是父类的引用,而实例是没变的,只是把实例当作另一个状态去看而已。但是强转对属性动态绑定到变量类型有影响。

eg1:方法动态绑定到运行期间对象的方法 实例1

 

eg2:方法动态绑定到运行期间对象的方法 实例2

11)为何查阅父类功能,创建子类对象使用功能?

Java中支持多层继承,也就是一个继承体系。想要使用体系,先查阅父类的描述,因为父类中定义的是该体系中共性的功能,通过了共性功能,就可以知道该体系的基本功能,那么这个体系已经可以基本使用了,然而在具体调用时,要创建最(低)子类的对象,原因如下:①因为父类有可能不能创建对象②创建子类对象,可以使用更多的功能,包括基本的也包括特有的。

12)属性无继承概念,所以你有你的,我有我的,各自调用各自的,不影响,即使子父类中有同名属性也无影响。

 

以上是关于JavaSE基础之继承的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE 学习笔记之继承

Java 基础入门随笔(11) JavaSE版——继承

JavaSE系列Java面向对象之组合多态与接口

JavaSE基础之面向对象(上)

Java面试题JavaSE基础之Java面向对象

JavaSE入门学习44:文件传输基础之I/O流