多态

  • 可以理解为 一个事物的多中形态
  • 父类的引用指向子类的对象
  • 多态只能通过父类调用子类重写的方法,执行的是子类中的方法 即虚拟方法
  • 多态的前提 : 类的继承关系 方法的重写
  • 多态格式: 父类名 变量名 = new 子类名();
  • 只适应方法,不适用于属性
  • 举例 : 来连接数据时conn = new mysqlconnect();是用来连接mysql的语句,我们要使sql可以连接多种数据库,就需要使new的对象都继承于前边的父类,这样就实现了动态的多态,也能根据new的对象调用相应子类中重写的方法。

instanceof

  • 用于向下转型 避免出现ClassCastExpection ,因此在向下转型之前需要先用instanceof判断
  • a instanceof A : 判断a是否是类A的实例,如果是返回true,不是则返回false

关于 ==(运算符) 和 equals(方法)

==(运算符)

  • == 对于基本数据类性来将(boolean除外) 比较两个变量保存的数值是否相等(不一定两者的类型要相等)
  • == 对于引用数据类型来讲,比较的是两个引用数据类型变量的地址值是否相等

equals(方法)

  • equals是Object的方法,必须使用类来调用,所以和基本数据类型没关系, 只适用于引用数据类型(类,接口,数组)

  • OBject的equals方法:
    public boolean equals(Object obj) {
    return (this == obj);

    • 像String,Date,File等,这些类都重写了Object类中的equals方法,重写以后比较是两个对象的实体内容(属性)是否相同,不再比较地址值
    • equals原则 ;对称性 自反性 传递性 一致性 (null.equals(a)和a.equals(null)永远都是false)

    Object 类

    • Object类是所有Java类的根父类
    • 如果在类的声明中未使用extends关键字指明其父类,则默认的父类为java.lang.Object
    • Object的属性和方法具有通用性
    • Object声明了一个空参构造器,所有类都可以继承到
    • Object.finalize()方法,用于销毁对象.垃圾回收器通知对象调用finalize()方法

    Object类中的toString()方法

    • 当我们输出一个对象时,实际是调用的Object的toString()方法
    • 格式 :
      public String toString() {
      return getClass().getName() + “@” + Integer.toHexString(hashCode());
      }
  • 像String,Date,File等,这些类都重写了Object类中的toString方法

Java中的JUnit单元测试

  • 选中当前工程 -> 右键选择 build path - add libraries - JUit 4 - 下一步
  • 创建Java类,进行单元测试
    1.类是public
    2.此类提供公共的无参构造器
  • 在类中声明单元测试方法
    1.方法的权限是public
    2.没有返回值
    3.没有形参列表
  • 在单元测试方法上需要声明@Test,并在类中导入org.junit.Test
  • Run as -> Junit test,运行绿色表示正常,红色表示异常

包装类

  • 针对八种基本数据类型定义的引用类型,也叫封装类
    byte -> Byte
    short -> Short
    int -> Integer
    long -> Long
    float -> Float
    double -> Double
    上边的六中的父类都是Number
    boolean -> Boolean
    char -> Character
  • 基本数据类型 转 包装类(引用数据类型,必有父类Object) : Integer in2 = new Integer(“123”);// 也可以用string,但是必须是纯数字
  • 包装类 转 基本数据类型 (调用包装类的方法xxxValue,xxx主要包装类是那个基本数据类型对应的包装类)
  • 自动装箱和自动拆箱
    // 自动装箱 :基本数据型 转 包装类
    int num1 = 10;
    Integer in1 = num1; // 可以直接赋值给Integer,不用在new Integer了
    // 自动拆箱 : 包装类 转 基本数据型
    Integer in2 = new Integer(20);
    int num2 = in2;
  • 基本数据类型和包装类 --> String
    1.连接运算 如 String Str1 = 1 + “你好”;
    2.使用String.valueof()方法
    String Str2 = String.valueof(234); OR String Str2 = String.valueof(new Integer("234));
  • String类型 -> 包装类或基本数据类型
    1.使用包装类的parseXXX(String s) ,XXX是就是包装类对应的基本数据类型。Integer.parseInt(“12367”)
public class Man extends Person{String  name = "Man";public void eat() {// TODO Auto-generated method stubSystem.out.println("男生吃饭!");}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
public class Person {private String name = "Person";public void eat() {// TODO Auto-generated method stubSystem.out.println("人吃饭");}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
blic class Test {public static void main(String[] args) {Person p = new Man();p.eat();p.equals(p);System.out.println(p.getName());// instanceofString str = new String();if(str instanceof String) {System.out.println("str 为 String类型的");}if(str instanceof Object) {System.out.println("所有类都是Object的子类");}str.equals(str);System.out.println(str.hashCode());System.out.println("------------------------------");Base b1 = new Base();b1.setOrderId(1);b1.setOrderame("txt");Base b2 = new Base();b2.setOrderId(1);b2.setOrderame("txt");System.out.println(b1 == b2 );System.out.println(b1.equals(b2));System.out.println(b1.toString());// 基本数据类型  转 包装类(引用数据类型,必有父类Object)int num1 = 10;Integer in1 = new Integer(num1);System.out.println(in1);Integer in2 = new Integer("123");// 也可以用string,但是必须是纯数字System.out.println(in2);Boolean boo1 = new Boolean("TrUe");System.out.println(boo1);Boolean boo2 = new Boolean("true123");// 忽略true大小写可以看看源码 s.equalsIgnoreCase("true")System.out.println(boo2);        // 包装类 转 基本数据类型 (调用包装类的方法xxxValue,xxx主要包装类是那个基本数据类型对应的包装类)Integer in3 = new Integer("456");int i8 = in3.intValue();}@org.junit.Testpublic void test1() {// 自动装箱   :基本数据型 转 包装类int num1 = 10;Integer in1 = num1; // 可以直接赋值给Integer,不用在new Integer了// 自动拆箱 : 包装类 转 基本数据型 Integer in2 = new Integer(20);int num2 = in2;Integer.parseInt("12367");System.out.println(Boolean.parseBoolean("123"));//false}
}class Base{private String orderame;private int orderId;@Overridepublic String toString() {// TODO Auto-generated method stubreturn getClass().getSimpleName()+"@"+Integer.toHexString(hashCode());}public String getOrderame() {return orderame;}public void setOrderame(String orderame) {this.orderame = orderame;}public int getOrderId() {return orderId;}public void setOrderId(int orderId) {this.orderId = orderId;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Base other = (Base) obj;if (orderId != other.orderId)return false;if (orderame == null) {if (other.orderame != null)return false;} else if (!orderame.equals(other.orderame))return false;return true;}
}

练习

     Object o1 = true ? new Integer(3) : new Double(2.0);// 三元运算符规定返回的元素必须类型一致,所以Integer自动提升为DoubleSystem.out.println(o1);// 1.0Integer i = 1; // Integer 内部定义了IntegerCaChe,IntegerCaChe内部定义了-128~127的数组,如果我们不通过new的方式,使用自动装箱的方式定义变量值,会优先在数组中寻找,此时如果数值相同地址值就是一样的,如果超出这个返回就会去new一个新的对象,地址值就不同了。Integer j = 1;System.out.println(i == j);//trueInteger m = 128;Integer n = 128;System.out.println(m == n);//false

最新文章

  1. 【总结+计划】2015一月份总结+2015二月份计划——全栈实践
  2. golang json 读写配置文件
  3. struts2实现拦截器的方法
  4. ZigBee,ZStack
  5. 斯坦福大学#深度多任务学习与元学习#视频及讲义下载
  6. 周期(KMP算法之Next数组的性质)
  7. Python中的*args和**kwargs的理解与用法
  8. Element 表单样式调整
  9. shell换行合并多个文件_shell两个文件去重的多种姿势
  10. 『GDAL』读写TIFF文件
  11. C#开发ActiveX控件
  12. SPSS 市场细分:客户画像\客户价值模型
  13. 一文带你深入浅出C语言运算符、表达式和语句
  14. Delphi好书推荐
  15. Python中的图像处理(第六章)Python图像量化及采样处理(2)
  16. bug:点击element的级联选择器 级联面板偶尔不显示 触发条件未知
  17. ASCII码_字符与数字转换等问题
  18. pdf.jsweb浏览pdf插件简单使用
  19. 图片上传系统在淘系中的实践
  20. 计算机毕业论文选题推荐|软件工程|系列一

热门文章

  1. c语言程序方差的计算公式,方差计算公式
  2. 大数据平台监控告警系统的实现
  3. 无线AP 传输、认证
  4. AI+科学计算-昇思MindSpore都给我们带来哪些惊喜?
  5. 开发中常用的工具类(一)
  6. python3定义函数_[Python3] 函数定义与使用[TZZ]
  7. win7局域网共享文件夹
  8. 图表有很多,你用对了么?
  9. python识别文字并且提示_Python识别文字,实现看图说话|CSDN博文精选
  10. 移动硬盘格式化后如何数据恢复?