2018年8月8日 面向对象预习笔记

一,多态性
1.多态—在Java中,子类的对象可以替代父类的对象使用
一个变量只能有一种确定的数据类型
一个引用类型变量可能指向(引用)多种不同类型的对象
Person p = new Student();
Object o = new Person();//Object类型的变量o,指向Person类型的对象
o = new Student(); //Object类型的变量o,指向Student类型的对象
(父类类型的变量可以指向子类的对象)
2.一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法
Student m = new Student();
m.school = “pku”; //合法,Student类有school成员变量
Person e = new Student();
e.school = “pku”; //非法,Person类没有school成员变量
属性是在编译时确定的,编译时e为Person类型,没有school成员变量,
因而编译错误。

二,虚拟方法调用
虚拟方法调用(多态情况下)
Person e = new Student();
e.getInfo(); //调用Student类的getInfo()方法
编译时类型和运行时类型
编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类的getInfo()方法。—— 动态绑定

三,多态性应用举例
方法声明的形参类型为父类类型,可以使用子类的对象作为实参调用该方法
public class Test{
public void method(Person e) {
//……
e.getInfo();
}
public static void main(Stirng args[]){
Test t = new Test();
Student m = new Student();
t.method(m); //子类的对象m传送给父类类型的参数e
}
}

四,instanceof 操作符

  1. x instanceof A:检验x是否为类A的对象,返回值为boolean型。
    要求x所属的类与类A必须是子类和父类的关系,否则编译错误。
    如果x属于类A的子类B,x instanceof A值也为true。
  2. public class Person extends Object {…}
    public class Student extends Person {…}
    public class Graduate extends Person {…}
    public void method1(Person e) {
    if (e instanceof Person)
    // 处理Person类及其子类对象
    if (e instanceof Student)
    //处理Student类及其子类对象
    if (e instanceof Graduate)
    //处理Graduate类及其子类对象
    }

五,对象类型转换 (Casting )
基本数据类型的Casting:
小的数据类型可以自动转换成大的数据类型
如long g=20; double d=12.0f
可以把大的数据类型强制转换(casting)成小的数据类型
如 floate f=(float)12.0 int a=(int)1200L
对Java对象的强制类型转换称为造型
从子类到父类的类型转换可以自动进行
从父类到子类的类型转换必须通过造型(强制类型转换)实现
无继承关系的引用类型间的转换是非法的
在造型前可以使用instanceof操作符测试一个对象的类型
对象类型转换举例
public class Test{
public void method(Person e) { //设Person类中没有getschool()方法
System.out.pritnln(e.getschool()); //非法,编译时错误

          if(e  instanceof  Student){
              Student me = (Student)e;  //将e强制转换为Student类型
              System.out.pritnln(me.getschool());
          }     
           }

           public static  void main(Stirng args[]){
              Test t = new Test();
               Student m = new Student();
               t.method(m);
           }

}

六,Object 类
Object类是所有Java类的根父类
如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类
public class Person {

}
等价于:
public class Person extends Object {

}
例: method(Object obj){…}//可以接收任何类作为其参数
Object o=new Person;
method(o);

七,==操作符与equals方法
==操作符与equals方法的区别:
- ==:

引用类型比较引用(是否指向同一个对象); Person p1=new Person(); Person p2=new
Person(); if (p1==p2){…}
基本类型比较值;int a=5; if(a==6){…} 用”==”进行比较时,符号两边的数据类型必须一致(可自动转换的基本数据类型除外),否则编译出错;

  • equals()方法是Object类的方法,由于所有类都继承Object类,也就继承了equals()方法。只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象。格式:obj1.equals(obj2)
    特例:当用equals()方法进行比较时,对类File、String、Date及封装类(Wrapper
    Class)来说,是比较类型及内容而不考虑引用的是否是同一个对象; (原因:在这些类中覆盖了equals()方法)

八,toString 方法

toString()方法在Object类中定义,其返回值是String类型,返回类名和它的引用地址。
在进行String与其它类型数据的连接操作时,自动调用toString()方法 Date now=new Date();
System.out.println(“now=”+now);
相当于 System.out.println(“now=”+now.toString());//now=Date@122345 可以根据需要在用户自定义类型中重写toString()方法 如String 类重写了toString()方法,返回字符串的值。
s1=“hello”;
System.out.println(s1);//相当于System.out.println(s1.toString());
在ToString1.java中的类A里覆盖toString方法,使其输出类A对象的cint属性值。
基本类型数据转换为String类型时,调用了对应封装类的 toString()方法int a=10;
System.out.println(“a=”+a);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值