美文网首页
java学习笔记——面向对象篇

java学习笔记——面向对象篇

作者: lulu_c | 来源:发表于2017-12-01 09:37 被阅读11次

    一、继承

    主要为了解决代码重复,提高代码维护性。

    继承的特性:
    子类拥有父类非private的属性,方法。
    子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
    子类可以用自己的方式实现父类的方法。
    Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性。
    提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。

    使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。

    super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
    this关键字:指向自己的引用。

    class Animal {
    void eat() {
    System.out.println("animal : eat");
    }
    }

    class Dog extends Animal {
    void eat() {
    System.out.println("dog : eat");
    }
    void eatTest() {
    this.eat(); // this 调用自己的方法
    super.eat(); // super 调用父类方法
    }
    }

    public class Test {
    public static void main(String[] args) {
    Animal a = new Animal();
    a.eat();
    Dog d = new Dog();
    d.eat();//因为实例化了dog对象,所以会调用dog类里的方法
    }
    }

    final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写

    构造器:
    子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。
    如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。

    截图20171031144724.png

    如果图中的SubClass(){
    super(300);
    System.out.println("SubClass");
    } 如果没有用super(300);也将默认调用父类无参数构造函数,
    如果父类只有带参数的构造方法,则子类一定要通过super关键字调用父类的构造器并配以适当的参数列表(其构造函数也要带参数如public SubClass(int n){super(300)})

    二、重写

    方法的重写规则:
    参数列表必须完全与被重写方法的相同;
    返回类型必须完全与被重写方法的返回类型相同;
    访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
    父类的成员方法只能被它的子类重写。
    声明为final的方法不能被重写。
    声明为static的方法不能被重写,但是能够被再次声明。
    子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
    子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
    重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
    构造方法不能被重写。
    如果不能继承一个方法,则不能重写这个方法。

    截图20171031160119.png

    当需要在子类中调用父类的被重写方法时,要使用super关键字。

    三、重载

    重载规则:
    被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);
    被重载的方法可以改变返回类型;
    被重载的方法可以改变访问修饰符;
    被重载的方法可以声明新的或更广的检查异常;
    方法能够在同一个类中或者在一个子类中被重载。
    无法以返回值类型作为重载函数的区分标准。

    截图20171031160839.png

    四、多态

    多态存在的三个必要条件:
    继承
    重写
    父类引用指向子类对象

    多态的实现方式:
    方式一:重写:
    方式二:接口

    1. 生活中的接口最具代表性的就是插座,例如一个三接头的插头都能接在三孔插座中,因为这个是每个国家都有各自规定的接口规则,有可能到国外就不行,那是因为国外自己定义的接口类型。
    2. java中的接口类似于生活中的接口,就是一些方法特征的集合,但没有方法的实现
      方式三:抽象类和抽象方法

    五、抽象类

    抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。

    抽象方法
    Abstract关键字同样可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。
    抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。
    如果一个类包含抽象方法,那么该类必须是抽象类。
    任何子类必须重写父类的抽象方法,或者声明自身为抽象类。

    六、接口

    接口与类的区别:
    接口不能用于实例化对象。
    接口没有构造方法。
    接口中所有的方法必须是抽象方法。
    接口不能包含成员变量,除了 static 和 final 变量。
    接口不是被类继承了,而是要被类实现。
    接口支持多继承。

    接口特性
    接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
    接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
    接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

    一个接口能继承另一个接口

    相关文章

      网友评论

          本文标题:java学习笔记——面向对象篇

          本文链接:https://www.haomeiwen.com/subject/oqivpxtx.html