一、Java中类的继承
(一)类的继承背景导入
java是一门面向对象的语言,在解决问题时,我们把事物看成一个个的对象,研究对象的属性和方法,同时,我们把具有相同的属性和方法的对象归为一类,我们可以由类创建不同的对象。
这里就产生了一个问题,比如说我们有一个学生类(Student),这个类定义了学生的姓名、性别、身高、日常娱乐活动等属性和方法,当我们需要研究大学生时,这个学生类的属性和方法就不够用了,因为大学生有区别于“这个学生类”的一些属性和方法,比如说专业等等。
如果我们再创建一个大学生类(UNStudent),就要重复定义和学生类中一样的属性和方法,这样不仅会显得代码冗长繁琐,而且不方便维护。为了体现现实中的类与类之间的关系,我们在定义的时候就要让大学生类继承学生类。
(二)类的继承格式
Java的继承通过extends关键字实现:
类型修饰词 class 子类 extends 父类{
//类定义的部分
}
比如上面的导入部分:
public class UNStudent extends Student{
//类定义的部分
}
(三)类的继承的注意点:
1.一个类只有一个直接父类,以下这段代码的写法是错误的:
public class A {}
public class B {}
public class C extends A,B {} // 一个子类继承了两个父类
但可以通过间接的方法实现一个类继承多个类:
public class A {}
public class B extends A {}
public class C extends B {}
这样类A就继承了类B和类C.
2.当子类继承父类后,子类就拥有了父类中定义的属性与方法,但是限于访问权限部分属性和方法不能直接使用。
3.而且子类还可以定义自己特有的属性和方法(这里的方法就只能有子类来调用)。
4.子类也可以重写父类的方法以满足子类的特定需求。但方法的声明除了访问权限可以扩大,其他(方法返回值类型、方法名、参数)必须完全保持一致。
二、Java中的接口
(一)接口的定义
接口类似于类,但接口更加抽象,我们只知道它是来干什么的,但如何实现这个功能却说不清,只有到了具体的子类我们才知道如何去做去。所以接口只是方法、属性、事件等组合而已,它只有方法的定义,并没有方法体。
(二)格式
1.Java 接口的定义方式与类基本相同,不过接口定义使用的关键字是 interface,格式: public interface 接口名{ }
关键字: interface
格式: public interface 接口名{ }
2.接口的属性
格式:【public static final】属性类型 属性名 = 属性值;
接口中的所有属性都是公有静态常量,即具有public ,static,final属性,但一般又不写这些修饰符。
(static : 静态的,修饰属性,则属性必须初始化)
(final : 不可改变的,修饰属性,则属性必须初始化)
3.接口的方法
格式:【public abstract】 方法返回值类型 方法名(参数类型 参数名,……);
(abstract :表示抽象的,Java接口的方法只能是抽象的和公开的,如果修饰方法,则方法不能有方法体)
(三)接口的实现
1.接口与类不同,Java里的方法是抽象的,没有方法体,不能够创建对象。若需要接口类型的对象,则必须创建一个类实现接口,重写接口的方法。
关键字: implements
格式:public class 类名 implements 接口名{
//接口的属性
//接口的方法
}
2.其中被实现的接口可以有多个,之间用逗号分隔,这一点是类在继承时无法做到的。
3.Java只支持单继承,如果想接口想达到多继承的效果,可以通过实现多个接口的方式来实现。
interface A{
int a=8;
void adda();
}
interface B extends A{
int b=18;
void addb();
}
interface C extends A,B{
int c=188;
void addc();
}
class Multiple implements C{
public void adda(){
System.out.println("a");
}
public void addb()
{
System.out.println("b");
}
public void addc()
{
System.out.println("c");
}
}
这样接口C就继承了类B和类C;用类Multiple实现了接口C.
若文章有错误,感谢大家指正。