zoukankan      html  css  js  c++  java
  • 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 子类;

  • 相关阅读:
    C# 用装饰模式
    31天重构学习笔记4. 降低方法
    JData 使用教程 对输入数据进行验证(服务端验证)
    sql over的作用及用法
    31天重构学习笔记3. 提升方法
    《博客园精华集》
    const和static readonly 区别
    JData 使用教程(四) 对输入数据进行验证(客户端验证)
    用JQuery制作简单实用的下拉菜单
    图片压缩后,依然很大的解决方案
  • 原文地址:https://www.cnblogs.com/tkj521Ya/p/11252218.html
Copyright © 2011-2022 走看看