一、Object类
1.Object类中的toString()方法是打印引用的地址,如System.out.println(stu);打印的便是stu引用的地址,其实是默认调了stu对象父类Object方法的toString()方法;若在Student类中重写了toString()方法,便会自动调用本类中的toString()方法。
2.equals()方法
Object类中的equals()方法是比较两对象的引用指向的地址是否为统一对象的地址。
二、instanceof关键字
在java中instanceof关键字判断一个对象是否属于一个类的实例,返回值为boolean类型
格式:对象 instanceof 类
注:这个类不一定非得是对象所属的类,当这个类是当前对象所属类的父类时返回值也为true!
三、多态性(这个是重点)
多态性的体现:
从方法的角度:方法的重载和方法的重写。
从对象的角度:向上转型和向下转型
向上转型和向下转型可以分析一下:
向上转型:子类对象 ->父类对象,格式:父类 父类对象 = 子类实例;
向上转型后,因为操作的是父类对象,所以无法找到在子类中扩展父类的方法,但如果调子类重写父类的方法时,则调用的是重写后的方法;
总结一下:经过向上转型后的父类对象无法调用子类中定义的新方法,调用被重写的方法是调用子类中重写的方法!
向下转型:父类对象 ->子类对象(必须明确写上要转型的子类的类型)
格式:子类 子类对象= (子类)父类对象
注:向下转型前父类对象需经过向上转型,即该父类对象必须为向上转型的父类对象,若该父类对象未经过向上转型,在编译期间不会出错,但在运行期间会出现ClassCastException(类转换异常)!
四、fianl关键字
在java中,声明的类、属性和方法时,可以用final修饰
1.final修饰的类成为最终类,不能被继承
2.final修饰的变量(成员变量和局部变量)则成为了常量,只能被赋值一次,但final修饰的成员变量必须在定义时就进行初始化值;局部变量无此要求,定义时可以不被赋值,但是也是只能被赋值一次。
3.final修饰的方法不能被重写,最终方法当然是不能被修改的。。。
五、抽象类
1. 抽象类不能被实例化,必须被继承;抽象方法必须被它生成的子类重写;抽象类中可以没有抽象方法,有抽象方法的类必须被定义为抽象类;抽象方法无方法体。
2. 若一个子类没有实现抽象父类中的抽象方法,或者只实现了部分方法,则这个子类也得被定义为抽象类,然而如果子类为非抽象类,则该子类要重写父类以及父类以上所有未重写的方法,就像祖祖辈辈都借高利贷,总有一个子孙出来把所有的高利贷都还上
3. 构造方法、静态方法、私有方法、final修饰的方法不能被声明为抽象方法
抽象类可以继承抽象类,可以不重写父类中的抽象方法,非抽象子类必须重写父类中的抽象方法。
六、接口
一、 接口的学习
接口(interface)是抽象方法和常量值的集合,从本质上讲,接口是一种特殊的抽象类,是一种”标准”,这种抽象类中只能包含常量和方法的定义,而没有常量和方法的实现。
1.接口的声明语法:
public interface 接口名称[extends 接口1,接口2,…]{
……
}
2.接口体包括常量定义和方法定义;
常量定义:typeNmme = value;该常量被实现该接口的多个类所共享,具有public static final的属性
方法体定义:具有public abstract的属性
3.接口的实现类
3.1与抽象类相同,接口使用时必须通过子类,子类通过implements关键字实现接口
3.2一个类可以实现多个接口,在implements子句中用逗号隔开
3.3非抽象子类必须实现接口中定义的所有方法
3.4接口与接口之间是继承的关系,一个接口可以继承多个父接口,那么一个非抽象子类在实现该接口时,不仅要实现该接口中所有的方法,还要实现该接口继承的所有父接口中的方法