# 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`

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://blog.mcyou.cc/java-xiang-guan/java-mian-xiang-dui-xiang-jian-yao-zong-jie-er.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
