JAVA面向对象

Java 继承

继承的特性

子类拥有父类非private的属性,方法。java

子类能够拥有本身的属性和方法,即子类能够对父类进行扩展。ide

Java子类能够用本身的方式实现父类的方法。函数

继承是单继承,可是能够多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,因此按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性。this

提升了类之间的耦合性(继承的缺点,耦合度高就会形成代码之间的联系)。spa

继承关键字

继承可使用 extends implements 这两个关键字来实现继承,并且全部的类都是继承于 java.lang.Object.net

super 关键字

· 调用父类的构造方法; 设计

· 调用父类的方法(子类覆盖了父类的方法时); 对象

· 访问父类的数据域。 继承

注意:super 语句必须是子类构造方法的第一条语句。不能在子类中使用父类构造方法名来调用父类构造方法。 父类的构造方法不被子类继承。调用父类的构造方法的惟一途径是使用 super 关键字,若是子类中没显式调用,则编译器自动将 super(); 做为子类构造方法的第一条语句。这会造成一个构造方法链。 接口

静态方法中不能使用 super 关键字。(this和super是须要对象才能够调用的,静态方法是属于类的,没有实例化的对象

 

只要是new子类,不管是调用子类的有参构造仍是无参构造都会执行父类的无参构造。当子类和父类有同一个变量名字的变量时(变量不会重写),若是是使用了多态则调用的是父类的变量。不然调用的是子类的变量。方法则会被重写

补充:执行顺序,静态块>构造语句块>函数块

 

例子:

public class A {    

    public int a = 0;

    public void fun(){

        System.out.println("-----A-----");

    }

}

public class B extends A{

    public int a = 1;

    public void fun(){

        System.out.println("-----B-----");

    }

public static void main(String[] args){

        A classA = new B();     

        System.out.println(classA.a);

        classA.fun();

    }   

}

输出结果为:

0

-----B-----

重写(Override)与重载(Overload)

重写是子类对父类的容许访问的方法的实现过程进行从新编写, 返回值和形参都不能改变。

重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常(只能抛出父类异常或其子异常)

若是不能继承一个方法,则不能重写这个方法。

构造方法不能被重写。

声明为final的方法不能被重写。

访问权限不能比父类中被重写的方法的访问权限更低。

 

重载规则

被重载的方法必须改变参数列表(参数个数或类型或顺序不同)

被重载的方法能够改变返回类型;

被重载的方法能够改变访问修饰符;

被重载的方法能够声明新的或更广的检查异常;

方法可以在同一个类中或者在一个子类中被重载。

没法以返回值类型做为重载函数的区分标准

Java 多态

多态分两种:

(1)   编译时多态(设计时多态):方法重载。

(2)   运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪一个方法则被称为运行时多态。(咱们平时说得多的事运行时多态,因此多态主要也是指运行时多态)一个接口,多个方法

运行时多态存在的三个必要条件:

1、要有继承(包括接口的实现);
2、要有重写;
3、父类引用指向子类对象。

当使用多态方式调用方法时,首先检查父类中是否有该方法,若是没有,则编译错误;若是有,再去调用子类的同名方法。

多态的好处

Ø 可替换性:多态对圆Circle类工做,对其余任何圆形几何体,如圆环,也一样工做。

Ø 可扩充性:在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。

Ø 接口性:向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。

Ø 灵活性:它在应用中体现了灵活多样的操做,提升了使用效率。

Ø 简化性:

 

抽象类总结

Ø 抽象类不能被实例化

Ø 抽象类中不必定包含抽象方法,可是有抽象方法的类一定是抽象类。

Ø 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。

Ø 构造方法,类方法(用static修饰的方法)不能声明为抽象方法。

Ø 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

Java 封装

 

封装是面向对象方法的重要原则,就是把对象的属性和操做(或服务)结合为一个独立的总体,并尽量隐藏对象的内部实现细节。

 

Java 接口

是抽象方法的集合,接口一般以interface来声明

接口特性

Ø 接口中每个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其余修饰符都会报错)。

Ø 接口中能够含有变量,可是接口中的变量会被隐式的指定为 public static final 变量(而且只能是 public,用 private 修饰会报编译错误。

Ø 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

 

抽象类和接口的区别

Ø 抽象类中的方法能够有方法体,就是能实现方法的具体功能,可是接口中的方法不行。

Ø 抽象类中的成员变量能够是各类类型的,而接口中的成员变量只能是 public static final 类型的。

Ø 接口中不能含有静态代码块以及静态方法(static 修饰的方法),而抽象类是能够有静态代码块和静态方法。

Ø 一个类只能继承一个抽象类,而一个类却能够实现多个接口。

相关文章
相关标签/搜索