您的位置:首页 > 编程语言 > Java开发

[Java之二]继承与接口

2017-07-27 22:48 211 查看

[Java之二]继承与接口

先分享一款产品



被媒体誉为安卓之父的安迪•鲁宾,最近发布了一款新的手机,PH-1

(这样的占屏比,让我觉得,小米拿下了首杀)

这部手机其实没有这么简单,一块屏幕也不是让我拿出来说的一点,真正让我喜欢的点,是它:

它的各个功能模块,都有磁铁和其他绑定其他设备的方式,这个体现呢他的模块化的理念,简单的理解就是,手机现有的一些功能可以通过其他设备进行加强,也可以用一些小配件增添其他功能。

那么问题来了。这样做有什么好处?

仔细想想其实很简单,手机的技术再好,也无法一次性的将所有最好技术都运用在一部手机上,这会增加很大的成本,和技术难题。将手机硬件的的各个功能“开源”,让其他专业做某一个功能的厂商提供更好的配件,让手机本身可以拥有更好的体验。可拆卸,可组合,功能更强大,更有乐趣。这是“开源”的力量,也是取长补短的智慧。

为什么要提它?

我们的Java和它一样,也是运用了这个智慧,让其更加强大。我们自己编写的类中很多属性和方法在其他类中已经有了,为了简化我们的工作,Java中有了【继承】。对于一些专门的方法,我们可以建立一个简单的【接口】,等需要的时候我们直接接入类中,拿来使用。

来,我们来进一步认识它们。

一.继承

1.格式:

如果A继承了B,也就是说,A拥有了B的所有属性,和方法。这时A叫做【子类】,B叫做【父类】。

格式: 关键字是: extends

书写方法: public class 子类名 extends 父类名{

}


这样,如果你要创建一个类(A),其部分功能在另一个类(B)中都拥有,那么你只需要让这个类(A)继承类(B)就可以了。减少了编写的工作量。

2.例子

我们需要一个创建两个对象(鸣人和佐助)。如果不使用【继承】,那么我们分别需要编写两个类。可是,我们发现他们两个类都有共同的特征,那么我们将这些共同特征编写一个父类(人)。然后让他们作为子类【继承】一下,就可以了

那么我们开始:

编写他们的父类(人)

public class Person {

public String name;

public int life;

public int gongji;

public void beat(Person p){

p.life = p.life-gongji;

}
public void show(Person x){

System.out.println(x.name+
4000
"还有"+x.life);
if(x.life<=0){
System.out.println(x.name+"被揍飞");
}
}


}

让子类(鸣人和佐助)【继承】这个父类

A(鸣人)

public class Mingren extends Person {

}

B(佐助)

public class Zuozhu extends Person {

}

简单的继承就是这个样子。

3.注意点

<1>子类继承了父类,那么子类就拥有父类的所以属性和方法。但是由于父类中访问权限不同, 有些子类无法访问。

<2>一个子类只能继承一个父类

<3>Java对于有些父类的方法没法满足子类需求时,Java有一个【重写机制】

【重写机制】:当父类的方法不满足子类的需要时,子类可以重新定义该方法。

要求:

1:必须要有继承关系。

2:方法的声明除了访问权限,其他必须一样。

以鸣人这个子类举例子

public class Mingren extends Person {

public class void beat(Person p ){

gongji=gongji*2;

super.beat(p); //包含了很多的以前的方法

gongji=gongji/2; //在以前的基础上做了改进

}

}

二.接口

我们来看看,拥有了【继承】Java还有哪些不方便?

我们来看这个地方:

<2>一个子类只能继承一个父类

那么我们总有一些东西是我们无法以继承的方式来编写的。可是那些需要大量重复书写,和模块化比较明显的程序,我们该怎么办呢?

来继续顺着我举得那个手机的例子,如果不能达到一揽子的满意,那么我们可不可以也像手机通过配件的方式,使Java成为编写给方便了呢?

当然,这里就有了【接口】。

1.格式

定义: 关键字 interface

public interface 接口名{

}

上面是对接口的编写

下面是对类的编写,进行对比。

public class 类名{

}

【接口】的属性: [public static final] 数据类型 属性名;

final : 最终的,不可修改的,修饰属性则属性在声明的时候必须初始化。

【接口】方法:[public abstract] 返回值类型 方法名(参数);

abstract :抽象的,修饰方法时,则方法不能有方法体。

2.例子

public interface USB {

//定义USB接口的宽度属性
public static final int width = 20;
//定义USB接口的高度属性
int height = 5;

//输入数据
public abstract void input();

//输出数据
void output();


}

其中:

public static final int width = 20;



int height = 5;

它们都是属性的描写方式,区别在于:

<1>.【接口】属性 的[public static final]可以省略,接口会自动补全

<2>.属性必须有初始值

其中:

public abstract void input();



void output()

它们都是方法的描写方式,区别在于;

<1>.【接口】方法的[public abstract]可以省略

<2>.【接口】的方法没有不能实现

3.接口的运用

接口就是手机的配件,只有和手机连接在一起才意义。这里说的【手机】是【类】,【配件】是【接口】,其用implements连接

举例:

public class Mouse implements USB{

//重写USB的输入数据方法
public void input(){
System.out.println("鼠标输入数据");
}

public void output(){
System.out.println("鼠标输出数据");
}


}

可以看出:

<1>【接口】的方法在连接【类】后所有的方法必须重写

<2>implements在【类】的后面,在【接口】前面

最后

隐喻和类比是伟大的学习方法

以上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: