码迷,mamicode.com
首页 > 编程语言 > 详细

JavaSE基础之继承

时间:2018-07-19 22:29:27      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:递归调用   加载   pre   执行   引用   创建对象   不同   直接   ase   

一.概念

      父子概念的继承:圆继承于图形,圆是子概念(子类型 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基础之继承

标签:递归调用   加载   pre   执行   引用   创建对象   不同   直接   ase   

原文地址:https://www.cnblogs.com/luke-liuqi/p/9338721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!