Java自学笔记(14):【面向对象】Object,多态,抽象类,接口

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 子类;

原文地址:https://www.cnblogs.com/tkj521Ya/p/11252218.html