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

给大忙人看的Java核心技术笔记(4、继承与反射)

时间:2016-06-13 13:12:12      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

继承是在现有类的基础上创建新类的过程。(实例变量和静态变量统称为域,类中的域、方法、嵌套类、接口统称为类成员)

反射机制:在程序运行期间查找类及其成员的能力

abstract方法没有实现;abstract类不能被实例化。

  子类不能直接访问父类的私有实例变量。

  不同于this引用,super不是对象的引用,而是绕过动态查找方法并调用特定方法的指令。

  覆盖一个方法时,可以将返回类型改成子类型(协变返回类型是允许的)

  重载一个方法时,子类方法的可见性至少与父类方法一样。父类方法是公有的,子类方法也必须声明为公有的。

1、子类的构造

  因为子类的构造函数不能访问父类的私有变量,所以必须通过父类的构造函数来初始化他们。

1 public Manager(String name,double salary){
2     super(name, salary);
3     bonus = 0;
4 }

2、父类赋值

  将一个子类对象赋值给父类变量是合法的

1 Manager boss = new Manager();
2 Employee empl = boss;

  ※此时在父类变量上调用方法时。即便类型是父类型,但是还是会调用子类型的方法。当调用方法时,虚拟机会查看对象的实际类型,并且定位方法的版本。这个过程被称作动态方法查找

  有了动态方法查找,就可以编写父类同意的操作,根据不同的子类返回不同的结果(一样的代码,返回不同的结果)。

  在Java中,父类赋值同样适用于数组。java数组是协变的。

1 Manager[] bosses = new Manager[10];
2 Employee[] empls = bosses;    //合法的
3 empls[0] = new Employee()    //编译通过,运行时错误,父类不能放在实际为子类数组里,ArrayStoreException

  将子类放入父类对象中,只能调用父类的方法。

1 Employee empl = new Manager()
2 empl.setBonus(100);    //编译报错,父类中没有setBonus方法
3 
4 //可以将父类引用转化成子类引用
5 if(empl instanceof Manager){
6     Manager mgr = (Manager)empl;
7     mgr.setBonus(100);
8 }

  将一个方法声明为final时,子类不可以覆盖它。final并不能提高效率,现代虚拟机会进行推理进行自动内联(http://blog.csdn.net/zq602316498/article/details/40266633?utm_source=tuicool&utm_medium=referral)

3、抽象方法和类

  一个类可以定义没有实现的方法,强迫子类去实现方法,这样的方法以及其所属的类被称为抽象方法和类。必须用abstract修饰。

  抽象类中可以拥有非抽象方法。

  ※不同于接口,抽象类可以拥有实例变量和构造函数。!接口可以定义常量,public static final int MAX = 10;

  构造抽象类的实例时不可能的。但是可以拥有一个类型为抽象类的变量,前提是该变量引用一个具体子类的对象

4、protected类型

  同一个包下的类都能访问,不同包下的子类能访问。

  

给大忙人看的Java核心技术笔记(4、继承与反射)

标签:

原文地址:http://www.cnblogs.com/Greekjone/p/5580063.html

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