一、类的继承
类可以继承,即基于原有的类派生出一个新类,子类继承父类的属性和方法。
继承表示方法:
<修饰符> class 子类名 extends 父类名{
类体
}
这样子类就可以调用父类的属性和方法。
例子:
class testclass {
public int normal_int = 1;
}
class another_class extends testclass{
int another_int = 1;
void a() {
normal_int = 233; //调用父类中的属性
}
}
可以通过 super.[属性或方法名]
来访问父类的属性或方法。
继承可以是多重次的,访问多重继承不需要使用super.super
,因为父类已经继承了其上的所有父类。
同其他方法一样,子类也可以直接调用父类的构造方法。示例如下:
class testclass2 extends testclass1{
testclass2(){ //testclass2的构造方法
super(); //调用父类的构造方法
}
}
二、重写
重写建立在继承关系上,能够让子类重新编写父类的某些方法,以使子类能够更加适应程序的需求。
例子:
class oneClass{
void print(){
System.out.println("属于父类");
}
}
class anotherClass{
void print(){
System.out.println("属于子类");
}
}
如果在子类中调用.print(),则实际会调用到被重写了的print方法,输出“属于子类”。
三、重载
在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 <接口名> {
...
}
例子:
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
通过面向接口编程,能够实现将具体实现和限制要求分离,从而减少程序间的耦合。