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

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

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

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类型

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

  

时间: 2024-08-11 01:05:34

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

给大忙人看的Java核心技术笔记(7、集合)

要点: 1.Collection接口为所有集合类提供了共同方法(映射除外,映射是通过Map接口描述的) 2.列表是一个有序集合,其中的每个元素都有一个整数索引 3.set针对高效包含测试进行过优化.Java提供了HashSet和TreeSet实现 4.对映射来说,可以选择HashMap或TreeMap实现.LinkedHashMap会记住元素插入的顺序. 5.Collection接口和Collections类提供了很多有用的算法:如设置操作,查询.排序.打乱原先顺序等 6.视图通过使用标准集合接

给大忙人看的Java核心技术笔记(6、泛型编程)

要点: 泛型类是带有一个或多个类型参数的类 泛型方法是带有类型参数的方法 可以要求类型参数必须是一个或者多个类型的子类型 泛型类型是不变得:当S是T的子类型是,G<S>和G<T>没有关系 通过使用通配符G<? extends T>或者 G<? super T>,你可以指定一个方法接受一个带子类或父类参数的泛型类型的实例 当泛型类和方法被编译时,类型参数会被擦除 类型擦除对泛型有诸多限制.特别是,不能实例化泛型类或数组.不能转换成泛型类型,或者抛出一个泛型类型

给大忙人看的Java核心技术笔记(10、并发编程)

本章要点: Runnable表述一个可以异步执行的任务 Executor将Runnable实例列入执行计划 Callable描述一个会产生结果的任务 可以向ExecutorService提交一个或多个Callable实例,并且当这些Callable有执行结果后,合并这些结果 当多个线程在没有同步的情况下操作共享数据时,其结果是不可预知的 与使用锁机制编程相比,并行算法和线程安全的数据结构更好 并行Stream和数组操作可以自动并且安全地将计算并行化运行 ConcurrentHashMap是线程安

给大忙人看的Java核心技术笔记(3、接口和lambda表达式)

1.接口是面向对象的关键特性:他们让你在不提供实现的情况下,指定应该做什么 近来,应为函数式编程非常适合并发和事件驱动编程,其重要性有所提升 接口的所有方法默认为公有方法,不用特意声明为public 实现类必须将接口方法声明为public,否则默认情况下,他们在包级别可访问.应为接口要求public级别访问,所以会报错 如果一个类只实现接口的某些方法,必须用abstract修饰 2.转换为接口类型 IntSequence digits = new DigitSequence(); 这句话创建的对

《写给大忙人看的java》笔记--基本的编程结构

1.字符串是UTF-16编码中的Unicode编码点的序列 2.绑定System.in的Scanner可以读取终端输入: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco } span.s1 { text-decoration: underline; color: #7e504f } span.s2 { color: #931a68 } span.s3 { color: #0326cc } Scanner sc = new S

《写给大忙人看的java se 8》笔记

现在才来了解java8,是不是后知后觉了点? 新的编程技术,个人不喜欢第一时间跟进. 待社区已有实践积淀再切入似乎更划算些? 一点点精明的考虑. 不多说,上代码. //读<写给大忙人看的java se 8>做的笔记代码 //希望对忙到连这书都没工夫看的你,匆匆一瞥,留下印象 //祝编程愉快 public class MainTest { //第一章,讲lambda表达式 //lambda表达式类似javascript的函数字面量,可用于替代java的匿名内部类 //基本型为 (形参列表)-&g

Java学习笔记之继承

一.继承的基础 在Java术语中,被继承的类叫超类(superclass),继承超类的类叫子类(subclass). 举例说明: 1 class Box 2 { 3 public double width; 4 public double height; 5 public double depth; 6 7 //重载构造方法 8 public Box(Box ob) 9 { 10 width = ob.width; 11 height = ob.height; 12 depth = ob.dep

Java基础笔记-抽象,继承,多态

抽象类: abstract修饰 抽象方法必须定义在抽象类中,抽象类不能创建对象. 在抽象方法中可以不定义抽象方法,作用是:让该类不能建立对象. 特点是: 1.定义在抽象类中 2.方法和类都用abstract修饰,在抽象类中的方法不写abstract也默认的是抽象方法. 3.不能用new来创建对象,调用抽象方法没意义. 4.抽象类中的方法被使用,必须由子类覆写其所有的抽象方法后,才能建立子类对象进行调用. 如果子类只覆盖了部分的抽象方法.那么该子类还是一个抽象类. 5.抽象类不可以被实例化. 继承

黑马程序员——JAVA学习笔记四(继承、接口、内部类)

1,    通过extends关键字让类与类之间产生继承关系.多个类中存在相同属性和行为时,将这些内容抽取到单独的一个类中,那么多个类无需定义这些属性和行为,只要继承那个类即可,已存在的类叫做超类,基类,或父类.新类称为子类,派生类,孩子类. 子类可以直接访问父类中的非私有的属性和行为.子类无法继承父类中私有的内容.JAVA不支持多继承,只支持单继承,多实现. 继承提高了代码复用性,让类与类之间产生了关系.为多态提供了前提. 2,    super关键字代表父类中成员变量内存空间的标示.两个作用