java_basic_review(5) java继承
public class Employee {private int age;private String name;private double salary;
public class Manager extends Employee{private double bonus;public Manager(int age, String name, double salary) {super(age, name, salary);}@Overridepublic double getSalary() {return super.getSalary() + bonus;}public void setBonus(double bonus) {this.bonus = bonus;}
}
@Testpublic void testArrayConvert() {Manager[] mArray = new Manager[3];;Employee[] eArray;eArray = mArray; // 编译器允许数组对象转换.eArray[0] = new Employee(1, "zhangfei", 13000); // throws exception.mArray[0].setBonus(1000);System.out.println(mArray[0].getSalary());}
Manager mTemp;Employee eTemp = new Employee();if(eTemp instanceof Manager) { // highlight.mTemp = (Manager)eTemp;}
@Overridepublic boolean equals(Object obj) { // defined in Person.javaif(obj instanceof Person) {return true;}return false;}
@Testpublic void testInstanceof() {Person p = new Person();Student s = new Student(); // Student extends PersonSystem.out.println(p.equals(s)); // true. 然而它们却属于不同的类.System.out.println(s.equals(p)); // true. 然而它们却属于不同的类.}
public abstract class Person {private String name;public Person(String n) {name = n;}public abstract String getDescription();public String getName() {return name;}
}
public class Student extends Person {private String major;public Student(String n, String m) {super(n);major = m;}public String getDescription() {return "a student majoring in " + major;}
}
step1)检测this 与 otherObject 是否引用同一个对象:if(this == otherObject) return true; // 实际上, 这是一种经常采用的形式, 因为计算这个等式要比一个一个地比较类中的域所付出的代价小得多;
step2)检测otherObject 是否为 null, 如果为 null ,则返回 false, 这项检测很有必要;if(otherObject == null) return false;
step3)比较this 与 otherObject 是否属于同一个类,如果equals 的语义在每个子类中有所改变,就是用 getClass 进行检测:if(getClass() != otherObject.getClass()) return false;
step4)将 otherObject 转换为 相应的类类型变量:ClassName other = (ClassName)otherObject;
step5)现在开始对所有需要比较的域进行比较了; 使用 == 比较基本类型域, 使用 equals比较对象域, 如果所有的域都匹配返回 true, 否则返回 false;return field1 == other.field1 && Object.equals(field2, other.field2) ;
Attention)如果在子类中重新定义 equals, 就要在其中包含 调用 super.equals(other);
@Override // defined in Manager.javapublic boolean equals(Object obj) {if(this == obj) { // step1: 检测this 与 obj 是否引用同一个对象return true;} else if(obj == null) { // step2: 检测 obj 是否为 nullreturn false;} else if(getClass() != obj.getClass()) { // step3: 比较this 与 obj 是否属于同一个类return false;} else { // step4: 将 obj 转换为 相应的类类型变量Manager m = (Manager)obj;return getName()==m.getName() && getAge()==m.getAge() && getSalary()==m.getSalary()&& bonus == m.getBonus();}}
/*@Overridepublic boolean equals(Employee obj){}*/
1)这个方法声明的显式参数类型是 Employee, 其结果并没有 覆盖 Object类的 equals 方法,而是定义了一个完全无关的方法;
int hash = 0;
for(int i=0;i<length(); i++)
hash = 31 * hash + charAt(i);
/*@Overridepublic int hashCode() {return 7*name.hashCode()+ 11*String.valueOf(salary).hashCode()+ 13*String.valueOf(age).hashCode();}*/@Override // defined in Employee via jdk7.public int hashCode() {return Objects.hash(age, name, salary);}
@Overridepublic int hashCode() { // defined in Manager.(Manager extends Employee.)return super.hashCode() + Objects.hash(bonus);}
@Testpublic void testHashCode() {Manager m1 = new Manager(1, "1", 1);Employee m2 = new Employee(1, "1", 1);System.out.println(m1.equals(m2)); // true.System.out.println(m1.hashCode() == m2.hashCode()); // true.}
@Testpublic void testArrayList() {ArrayList<Double> list = new ArrayList<>();list.ensureCapacity(3);list.add(Double.valueOf(1));list.add(Double.valueOf(2));list.add(Double.valueOf(3));list.trimToSize();// 不会报错,只是告诉jvm 回收多余的内存.list.add(Double.valueOf(4));System.out.println(list.size()); // 4}
@Testpublic void testArrayList() {ArrayList<Double> list = new ArrayList<>();list.ensureCapacity(3);list.add(Double.valueOf(1));list.add(Double.valueOf(2));list.add(Double.valueOf(3));list.trimToSize();// 不会报错,只是告诉jvm 回收多余的内存.list.add(Double.valueOf(4));System.out.println(list.size());Double[] dArray = new Double[list.size()]; list.toArray(dArray); // 访问数组元素for(double d : dArray) {System.out.print(d + ", "); // 1, 2, 3, 4 }int n = list.size() / 2;list.add(n, Double.valueOf(5)); // 在 数组列表中间插入元素.这种操作如果多的话,建议 LinkedListSystem.out.println("\n" + "new array: ");for (Double temp : list) {System.out.println(temp); // 1, 2, 5, 3, 4} }
@Test // 参数数量可变的方法 ( Object... == Object[] )public void testVariableParameters() {System.out.printf("%d %s", new Object[]{new Integer(100), "widgets"});prettyPrint(100, "widgets");prettyPrint(new Object[]{new Integer(100), "widgets"});}public void prettyPrint(Object... args) {System.out.printf("\n%d %s", args);}
100 widgets
100 widgets
100 widgets
public enum Size {SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");private String abbreviation;private Size(String abbreviation) {this.abbreviation = abbreviation;}public String getAbbreviation() {return abbreviation;}
}
public enum Size {SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");private String abbreviation;private Size(String abbreviation) {this.abbreviation = abbreviation;}public String getAbbreviation() {return abbreviation;}
}
@Testpublic void testEnum() {Size[] values = Size.values();for(Size size : values) {System.out.println(size); // 调用枚举类中元素.}int ordinal = Size.MEDIUM.ordinal();System.out.println(ordinal); // 枚举常量的序数// 将s 设置为 Size.SMALL;Size s = Enum.valueOf(Size.class, "SMALL");System.out.println(s);}
SMALL // console info.
MEDIUM
LARGE
EXTRA_LARGE
1
SMALL
java_basic_review(5) java继承相关推荐
- java继承详解加练习题
继承 继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法 继承的好处 提高了代码的复用性(多个类相同的成员可以收到同一个类中) 提高了代码的维护性 ...
- java继承对象转换_java 继承的基础(转)
java 继承的基础(转)[@more@]继承是面向对象编程技术的一块基石,因为它允许创建分等级层次的类.运用继承,你能够创建一个通用类,它定义了一系列相关项目的一般特性.该类可以被更具体的类继承,每 ...
- Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态
Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...
- Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常
Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常 参考文章: (1)Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并 ...
- java 继承类 变量、静态变量、构造函数执行顺序
java 继承类 变量.静态变量.构造函数执行顺序 Java代码 class C{ static int prt(int i){ System.out.println(i); return i; ...
- Java继承时构造函数的关系
Java继承时构造函数的关系,先来一道笔试题给大家看看: 在继承中,关于构造方法的说明,下列说法错误的是() A.子类无条件的继承父类的无参构造方法, B.子类可以引用父类中的有参构造方法,使用sup ...
- java继承关键字super_java学习笔记-继承中super关键字
背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...
- Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式
一.继承的概念及用法 继承背后的思想就是 基于已存在的类来构建新类 当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求 ...
- Java继承Thread类创建多线程
Java继承Thread类创建多线程 单线程示例 示例,Example01.java public class Example01{public static void main(String[] a ...
最新文章
- android jni语法,Android NDK中的JNIEXPORT和JNICALL
- linux raid md,具有不可预测功耗的情况下的Linux MD RAID弹性
- 蓝桥杯-5-1最小公倍数(java)
- 一阶微分方程的物理意义_MIT—微分方程笔记24 一阶常微分方程组
- 项目总结——机房收费系统合作版
- Leetcode--94. 二叉树的中序遍历(迭代递归)
- win7纯净版系统锁定系统时间的设置方法
- 计算机英语讲课笔记02
- 【英语学习】【Daily English】U02 Daily Routine L01 Sadly, my schedule is very tight.
- ebs oracle pl sql开发_ORACLEERP开发基础之EBS开发基础
- 「三分钟系列05」3分钟看懂并发与并行
- 优雅的对 list 遍历进行 add 或者 remove 操作
- 毕业设计,MD2模型动画展示
- 开式系统管径推荐选型_列管式换热器选型设计计算
- 使用原生js实现图片放大器效果
- dskinlite(uieasy mfc界面库)使用记录4:绘制动态元素(listbox)
- arcgis 批量计算几何_GIS中的计算几何
- html页面去边框线,html中怎么去掉表格边框线的?
- 唐诗欣赏静夜思用html设计,古诗鉴赏:静夜思
- 为什么域名还会被DNS污染?域名被污染清洗方法!