这样类与类之间就存在了继承的关系。子类可以直接访问父类中的非私有的属性和行为。在代码中通过extends关键字表示继承关系。例:
class Son extends Father{} //这也是在代码中的书写格式。
2、特点
1、提高了代码的复用性。
2、让类与类之间产生了关系。有了这个关系,提供了多态的前提。
3、Java语言中,只支持单继承,不支持多继承。例:一个儿子只能有一个父亲。可以多层继承。也就是一个继承体系。
例:class Gran{}
class Father extends Gran{}
class Son extendsFather{}
3、实例应用
class Fu {//定义父类
//属性为名字和年龄
String name;
int age;
//在构造函数中对名字和年龄进行初始化
Fu(String name, int age) {
this.name = name;
this.age = age;
System.out.println(name + "," + age);
}
//Fu都具有说话的功能
void speak() {
System.out.println("fu speak java language");
}
}
//定义子类,继承父类
class Zi extends Fu {
///super关键字表示父类,因为姓名和年龄在父类中进行了初始化动作,在这里可以直接调用
Zi(String name, int age) {
super(name, age);
super.speak();
}
//子具有说话的功能
void speak() {
System.out.println("zi java language");
}
}
class Test10 {
public static void main(String[] args) {
Zi z = new Zi("zhangsan", 20);
z.speak();
}
}
输出结果:
zhangsan,20
fu speak java language
zi java language
//实例化保存平行四边形对象的数组对象
public void draw(Parallelogram p){
//定义一个draw()方法,参数为本类对象
//绘图
}
}
public abstract void eat();
}
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
public void catchMouse() {
System.out.println("抓老鼠");
}
}
class Test10 {
public static void main(String[] agrs) {
Animal a = new Cat();//向上转型,这样猫就有了吃的方法
a.eat();//调用吃鱼方法
Cat c = (Cat) a;//向下转型:将父类对象赋予子类对象,并强制转换成子类对象,也就是将抽象类转换成具体类
c.catchMouse();//调用抓老鼠的方法
}
}
一、概述
接口,可以被认为是一个特殊的抽象类。当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。接口使用interface来表示,子类中用implements实现。格式为:
interface 接口名{}
子类名 implements接口名{}
格式特点:
1、接口中常见定义:常量,抽象方法。
2、接口中的成员都有固定修饰符。
常量:public static final
方法:public abstract
3、接口中的成员都是public的。
在使用中,常量可以不写public static final,方法可以不写public abstract,编译时Java会自动添加这些修饰符,因为这是固定的格式修饰符。但为了方便阅读,通常都写上。
二、特点
1、接口是对外暴露的规则。
2、接口是程序的功能扩展。
3、接口的出现降低耦合性。
4、接口可以用来多实现。这也是对多继承不支持的转换形式。java支持多实现。
5、类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
6、 接口与接口之间可以有继承关系。而且可以多继承。
注:1、接口不可以创建对象的,因为有抽象方法。需要被子类实现(implements),子类对接口中的抽象方法全都覆盖后,子类才可以实例化。否则子类是一个抽象类。
2、实现多个接口时,接口中不可以有返回不同类型的同名抽象函数。这样子类实现时将不能复写。
三、接口与抽象类
共性:都是不断向上抽取出来的抽象的概念。
区别:
1、抽象类体现继承关系,一个类只能单继承。
接口体现实现关系,一个类可以多实现。同时接口与接口之间有继承关系。
2、抽象类是继承,是 "is a "关系。
接口是实现,是 "like a"关系。
3、抽象类中可以定义非抽象方法,供子类直接使用。
接口的方法都是抽象,接口中的成员都有固定修饰符。
4、抽象类中可以私有变量或方法。
接口中的常量和方法都是public修饰的权限。
实例应用:
//定义一个电脑接口
interface PCI
{
public void run();//
public void close();
}
class MainBoard //电脑主板
{
public void run()
{
System.out.println("主板运行");
}
public void UsePCI(PCI p)//主板使用PCI接口
{
if (p!=null)//判断接口是否为空,如果不为空则开启接口的功能
{
p.run();
p.close();
}
}
}
class NetCard implements PCI //实现PCI接口,复写PCI的方法
{
public void run() //复写run()方法,让网卡运行
{
System.out.println("网卡运行");
}
public void close()//复写close()方法,让网卡关闭
{
System.out.println("网卡关闭");
}
}
class SoundCard implements PCI//实现PCI接口,复写PCI的方法
{
public void run()//复写run方法,让声卡运行
{
System.out.println("声卡运行");
}
public void close()//复写close()方法,让声卡运行
{
System.out.println("声卡关闭");
}
}
class Demo
{
public static void main(String[] args)
{
MainBoard mb=new MainBoard();//建一个主板电脑
mb.run();//运行电脑
mb.UsePCI(new NetCard());//通过电脑主板可以连接接口,通过接口连接网卡来实现开启网卡,关闭网卡的功能
mb.UsePCI(new SoundCard());//通过电脑主板可以连接接口,通过接口连接网卡来实现开启声卡,关闭声卡的功能
}
}