[Java之二]继承与接口
来源:互联网 发布:dnf额外暴击伤害算法 编辑:程序博客网 时间:2024/06/03 20:47
[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+"还有"+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在【类】的后面,在【接口】前面
最后
隐喻和类比是伟大的学习方法
以上
- [Java之二]继承与接口
- java继承与接口
- Java 继承与接口
- java继承与接口
- 继承与接口(二)
- java 学习笔记 继承与接口(二)
- Java学习笔记之继承和接口(二) 继承和多态、接口
- Java ——基础之继承与接口的区别
- Java 基础之继承与接口的区别
- Java核心之接口、继承与多态
- java继承与多态之抽象类和接口
- 继承与接口之默认继承方式
- C++之实现继承与接口继承
- 澄清Java----接口与继承
- java基础:继承与接口
- Java接口与多继承
- Java继承关系与接口
- java基础-继承与接口
- C语言实现静态顺序表
- HDU 6039 Gear up 2017 Multi-University Training Contest
- 排序算法总结
- Python读写Excel文件,xlrd ,xlwt ,xlutils
- HTTP 代理
- [Java之二]继承与接口
- Wolf and Rabbit (GCD)【HDU】-1222
- STL之序列式容器难点分析
- unity学习日记-协程
- BOOST 日期时间库 之 日期长度与日期区间 2/3
- CSU-ACM2017暑期训练3-递推与递归 Non-boring sequences
- 从数据库获取到json数据,前端用vue.js数据绑定
- c++实现顺序表
- RabbitMQ消息队列生产者和消费者