Object简介
Java中的每个类都源于 jave.lang.Object
如果类没有指定继承关系,则默认继承自Object
下面介绍Object类的常用方法:
1,public String toString() 普通 返回该对象的字符串表示(可以对此方法覆盖)
System.out.println(cat.eyeColor.toString());
2,public int hashCode() 普通 返回该对象的哈希码值
(该方法被native修饰,无方法体,原因:native修饰的方法是使用其他语言实现的,不在当前文件)
System.out.println(cat.eyeColor.hashCode());
public boolean equals(Object obj) 普通 比较两个对象是否相等(比较的是对象是否是同一个,而==比较的是内容)
System.out.println(cat.equals(dog)); //false
在后面的类中一般会重新这三种方法
面向对象的三大特性
1,封装性 :对象和类的主要特征,隐藏实现细节 ,对外接口public,成员变量private
2,继承性 :子类(派生类)继承父类(基类,超类),从一般到特殊
3,多态性 :最重要的特性
多态是指程序中定义的引用变量所指向的具体对象,和通过这个引用变量发出的方法调用结果,在编程时不能确定,而是在程序运行时才能确定
即不修改代码就可以改变程序运行时所绑定的具体代码,让程序选择状态
必要条件:有继承,有重写,有父类引用指向子类对象(向上转型)
抽象类
抽象方法:只需给出方法头部的定义,而不需要实现方法体,因为没有具体的方法实现,所以把这种方法称为抽象方法 使用abstract修饰
public abstract void eat();
设计原因:抽象类自己没有办法实现这个方法,或者说再抽象类这一层,不知如何实现这一方法,只有到了具体子类才有办法实现
抽象类:如果一个类中含有抽象方法,那么这个类一定是抽象类,反之不成立。在定义类时使用abstract修饰。即使类中没有抽象方法也可以如此做,此时仅仅是为了避免对类实例化
abstract class animal{ public abstract void eat(); }
abstract class animal{ public void eat(){ } }
抽象类可以有成员变量和成员方法,抽象类必须有子类,不然没意义
抽象类不能实例化!
public abstract class Shape { public abstract void area(); public abstract void perimeter(); }
public class Circle extends Shape { private double r; public Circle(double r) { super(); this.r = r; } @Override public void area() { // TODO Auto-generated method stub double area=Math.PI*r*r; System.out.println(area); } @Override public void perimeter() { // TODO Auto-generated method stub double perimeter=2*Math.PI*r; System.out.println(perimeter); } public static void main(String[] args) { Circle circle =new Circle(2); circle.area(); circle.perimeter(); } }
结果:
接口
特殊的抽象类,只包含常量和抽象方法 用inferface修饰
interface Runner{ int ID=1; viod run(); }
如何使用: 1,可以作为数据类型,但不能被实例化
2,可以被继承
3,必须有子类实现它,否则无意义
如何实现:
class dog implements Runner{ //使用implements实现接入接口 public void run(){ System.out.println("狗四条腿跑"); } }
子类必须实现接口的所有方法,否在子类为抽象类
一个子类可以有多个接口
接口规定的是能做什么,倾向的是对行为的约定,更利于多态。
抽象类更强调的是一种是什么,是一种继承关系。
实例化 :
接口 实例对象 = new 子类;