# java面向对象简要总结 二

***

## 一、类的继承

类可以继承，即基于原有的类派生出一个新类，子类继承父类的属性和方法。

继承表示方法：

```java
<修饰符> class 子类名 extends 父类名{

类体

}
```

这样子类就可以调用父类的属性和方法。

例子：

```java
class testclass {
    public int normal_int = 1;
}

class another_class extends testclass{
            int another_int = 1;
            void a() {
                normal_int = 233; //调用父类中的属性
            }
        }
```

可以通过 `super.[属性或方法名]` 来访问父类的属性或方法。

继承可以是多重次的，访问多重继承不需要使用`super.super`，因为父类已经继承了其上的所有父类。

同其他方法一样，子类也可以直接调用父类的构造方法。示例如下：

```java
class testclass2 extends testclass1{
    testclass2(){ //testclass2的构造方法
        super(); //调用父类的构造方法
    }
}
```

## 二、重写

重写建立在继承关系上，能够让子类重新编写父类的某些方法，以使子类能够更加适应程序的需求。

例子：

```java
class oneClass{
    void print(){
        System.out.println("属于父类");
    }
}

class anotherClass{
    void print(){
         System.out.println("属于子类");
    }
}
```

如果在子类中调用.print()，则实际会调用到被重写了的print方法，输出“属于子类”。

## 三、重载

在java中，只要方法的参数不一样，就可以允许两个或多个方法同名。因此，可以基于提供参数的不同，分别执行不同的方法。

例子：

```java
public class oneClass{
    void print(){
        System.out.println("打印了寂寞");
    }
    void print(int a, int b){
        System.out.println(a+"和"+b);
    }
    void print(int a, bool b){
        System.out.println(a+"和"+b);
    }
}
```

## 四、隐藏和封装

java提供了3种访问控制符，与默认权限一起组成了4种访问控制级别，分别是：

* private
* default
* protected
* public

通过对类的属性和方法进行有效的权限控制，可以隐藏有必要隐藏的内容，只对外保留以需要的方法或属性的访问权限，以确保自己程序的运行不会因为外界访问而产生问题。

也可以通过访问权限控制，增加符合自身要求的供外界调用的方法，保证数据的产生或修改都符合自身程序要求，保证运行稳定，而不是让外界直接修改类内部的数据。

所谓“高内聚，低耦合”，就是让内部具体实现的方式封装在内部，而只提供少量必要方法供外部使用。

## 五、接口

接口与类相似，接口也可以定义方法，作为系统与外界交互的窗口，规范实现者提供的服务，可以作为多个程序之间的通信标准。

申明方法：

\[public] interface 接口名 {

\[常量]

抽象方法

}

接口中为保证静态且final，只能定义常量，不能定义变量。

接口里的方法都是公共的且抽象的，默认强制设置，可以不用关键字修饰。

因为接口中的方法都是抽象的，要实现这些方法，必须要由其他类来进行实现。

实现接口的格式：

class 类名 implements <接口名> {

...

}

例子：

```java
interface jiekou{
    int add(int a,int b);
}
class classOne implements jiekou{
    public int add(int a,int b){
        return a+b;
    }
}
```

一个类可以实现多个接口，弥补了继承的不足。

`implements 接口1, 接口2`

通过面向接口编程，能够实现将具体实现和限制要求分离，从而减少程序间的耦合。
