java的继承方式
java是一种面向对象的语言(OOP),而OOP的一个特点就是继承性,在java语言中,有一个名为java.lang.Object类,java中的所有类都是直接或者间接的继承它得到的。接下来,我们来介绍下,java语言中,继承是怎么实现的(单继承和多继承)。
单继承
java中语言只支持单继承机制,也就是所有类只有一个直接父类,并且单继承是利用extends关键字来实现的。
格式如下(由于比较简单就不举例子了):
class A{//父类A
// 成员变量;
// 成员方法;
}
class B extends A{//B类继承A类
// 成员变量;
//成员方法;
}
/*需要注意的是,此时B类已经继承了A类的成员和方法,当A类出现出现抽象方法时,需要在子类B类中覆盖该方法,否则是不能用new为其创建实例对象的
- 解释:
覆盖:在子类中定义与父类中方法完全相同的名称、参数类型、参数个数,然后再重编程该方法,达到用新功能覆盖掉父类中方法的功能。
多继承
由于java只支持单继承机制,所以在实现多继承功能的时候就不如单继承那么简单了。下来,我们介绍三种可以实现多继承的方法。
方法1:接口
首先,我们补充一下知识点。
- 抽象类:抽象类是不能用new来创建实例对象的类。格式如下:
abstract class Class_Name{
//成员变量;
返回值类型 方法名(形参列表){
//具体实现
}
}
- 接口:接口与抽象类相似,不过,接口需要满足以下条件:
(1)接口的成员变量全部是静态成员变量,且经过初始化的
(2)接口中的成员方法全部要声明为abstract的
接口的定义方法如下:
[public] interface Inter_Name [extends 父类接口名称]
{
//成员变量
[public][static][final] 数据类型 成员变量名=常量;
//成员方法
[public][static] 返回值类型 方法名(形参列表);
}
用接口实现多继承需要用到implements关键字,下面,我们举个例子看看:
/接口实现多继承
interface Inter_A{//父接口Inter_A
final double PI=3.1415926;
abstract double C();//周长
}
interface Inter_B {//父接口Inter_B
abstract double area();//面积
}
public class Class_AB implements Inter_A,Inter_B {
private double r;
public Class_AB(double r){
this.r=r;
}
public double C(){
System.out.println("圆的周长:"+2*PI*r);
}
public double areaC(){
System.out.println("圆的面积:"+PI*r*r);
}
public static main(String[] args){
Class_AB o=new Class_AB(5.0);
o.C();
o.area();
}
}
方法2:内部类
- 内部类:即定义类在部的类。当内部类没有类名,在定义的同时就生成了对象的类叫做匿名内部类,很显然,匿名类只能生成一次对象。(这里的一次不仅限于声明一个对象)
下面,我们举个例子看一下:
class A{
private int num=1;
public int getit(){
return this.num;
}
}
class B {
private String name="wenzhu";
public String getit(){
return this.name;
}
}
class AB {
class inA extends A{//inA为内部类
public void printA(){
System.out.println(this.getit());
}
}
class inB extends B{//inB为内部类
public void printB(){
System.out.println(this.getit());
}
}
public void print(){//显示出A类B类中的数值和字符串
new inA().printA();
new inB().printB();
}
public static void main(String[] args){//执行起点
AB ab=new AB();
ab.print();//显示出A类B类中的数值和字符串
}
}
方法3:多层继承
该方法就是按照单继承的模式,依次继承所需要的类即可。该方法不难,但是比较麻烦,尤其是在要继承的类很多时,导致代码过长,容易出错,所以并不是很推荐,这里举例说明了。