继承这个词我们在平时生活中也是经常遇到的~~子一代继承父辈的遗产,或者继承什么什么的传统等等。~那现在用一段代码来看看java中的继承是什么意思的吧~
//定义一个学生类
public class Student{
//定义学生的属性
private String name = "XiaoYZ";
public int age;
//定义学生可以做的一些方法
public void study(){
System.out.println(name+"学生在学习");
}
public void play(){
System.out.println(name+"学生在玩儿");
}
}
//再定义一个大学生类
public class UnStudent extends Student{
public void dota{
System.out.println(name+"大学生在打dota");
}
public void play(){
System.out.println(name+"大学生在玩游戏");
}
}
其实通过这两段代码就可以弄明白继承这种关系了。可以看出,学生是一个较大的范围,而大学生则是学生中的一类,可以说是学生类包含大学生类,大学生类包含于学生类。这样,我们再构建大学生类的时候,使用了extends这个关键字,用来继承Student这个类。这样做便达到了继承学生类的目的。那么都可以继承些什么呢?。我们再写一段Test代码来检测一下。
//定义一个Test类用作测试继承的效果
public class Test{
public static void main(String args[]){
//定义一个大学生类的对象stu,并执行一定操作
UnStudent stu = new UnStudent();
stu.age = 20;
stu.study();
stu.play();
stu.dota();
//再定义一个学生类的对象
Studen stu1 = new UnStudent();
stu1.study();
sut1.play();
stu1.dota();
}
}
这个代码编译肯定不会通过。因为我们要弄懂继承都可以继承什么。子类可以继承父类所有的非私有的属性和方法。所以刚才我们student类的name属性我们定义为private。那么在UnStudent这个大学生类中既然继承了Study和Play这两个方法,但调用他们的时候需要name这个属性,所以会报错。同时,大学生类里面定义的dota()方法和play()方法也会有同样的报错。
另外我们也会看到,在父类中已经定义了一个play()的方法,但在子类UnStudent中又出现了一个重新定义的played()的方法。这样是否矛盾呢,答案是否定的。这种情况是方法的重写。所以在Test中我们建立一个大学生类的对象stu调用stu.play()这时输出的是“大学生在玩游戏”。
在Test中还有另一个对象,stu1。这个对象是学生类的,但用的是大学生类的构造方法。这是就会出现一种自动转型的情况。就是从范围比较小的类自动转换为范围比较大的类。因此这个stu1是Student类型的对象,所以执行play()输出会是“学生在玩儿”。而执行dota(),则会报错。因为dota()这个方法是UnStudent才可以执行的。
我们还可以看到,同样都是执行play()这个方法,stu和stu1两个对象执行出的结果是不同的。这就是多态的实现。
可以说:正是因为有了继承,之后才会有方法的重写。
正式因为有了方法的重写,才会出现多态。
接着再对接口进行一个小小的总结吧。
其实接口和继承是有些相似的。有的时候我们创建一个类,可能那个类的属性或者是方法我们无法去描述。因为一个类如果范围越大那么这个类中对象的共同点就会越少。所以我们可以用一种模糊的方式来创建一个类,也就是接口interface。
/**
* 定义一个人类的接口
* @author 肖一喆
*
*/
public interface People {
public static final String name1= "xyz";
//定义人类接口的方法
public abstract void play();
public abstract void study();
public abstract void sleep();
}
从这个代码可以看出,我们定义这个接口是有一定要求的。首先属性必须是public,static,final。就是必须是一个常量。还有再定义方法的时候我们不用把每一个方法的内容给写出来,可以像是c语言里面的函数的声明一样。但当我们去实现这个接口的时候,则需要把他的所有方法给定义好。
/**
* 定义一个大学生类
*
* @author 肖一喆
*
*/
public class UnStudent implements People{
public int age = 19;
public void study(){
System.out.println(name1+"大学生在学习");
}
public void sleep(){
System.out.println(name1+"大学生在睡觉");
}
public void play(){
System.out.println(age+"大学生在玩儿");
}
就像这样。我们用大学生这个类来implements People这个接口,就要在UnStudent中把People中的方法给写好。
我们在来看几段代码,就可以把继承和接口的一些关系给弄明白了。
首先就是定义一个People的接口。
/**
* 定义一个人类的接口
* @author 肖一喆
*
*/
public interface People {
public static final String name1= "xyz";
//定义人类接口的方法
public abstract void play();
public abstract void study();
public abstract void sleep();
}
之后再定义一个Student的接口
/**
* 定义一个学生的接口
* @author 肖一喆
*
*/
public interface Student {
//定义接口的属性
public static final String name = "XiaoYZ";
//定义接口的方法
public abstract void study();
public abstract void sleep();
}
再创建一个大学生类
/**
* 定义一个大学生类
* 一个class实现多个interface
* @author 肖一喆
*
*/
public class UnStudent implements Student,People{
public int age = 19;
public void study(){
System.out.println(name+"大学生在学习");
}
public void sleep(){
System.out.println(name1+"大学生在睡觉");
}
public void play(){
System.out.println(age+"大学生在玩儿");
}
}
从这里我们就能看出一点。就是:一个class可以implements多个interface。这里UnStudent这个类即实现了Student这个接口,又实现了People这个接口。但我们也发现People和Student这两个接口中,存在两个同名字的方法,都有sleep()y和study()这两方法,但这并不影响。因为我们在用UnStudent这个类实现这两个接口的时候需要给方法写全,在这里只要给他们写完整就可以的!
在这里我们再定义一个接口
/**
* 定义一个中南大学学生接口
* 一个interface继承多个interface
* @author 肖一喆
*
*/
public interface CSUstu extends Student,People{
public abstract void rest();
}
我们就可以看出这里是一个CSUstu的接口继承了Student,People这两个接口。
最后还有一种情况就是:一个class可以extends一个class并且再去implements多个interface。
/**
* 创建一个中南大学学生的类
* 一个class只能继承一个class,可以实现多个interface
* @author 肖一喆
*
*/
public class CSUstu1 extends UnStudent implements CSUstu,People{
public void rest(){
System.out.println("中南大学学生在休息");
}
}
这里可以看出因为CSUstu1这个类所继承的那个Unstudent类已经把People中的方法给补全了,所以不用再重新补全People中方法。但需要补全CSUstu中的rest()方法。
总结起来可以有如下几点:
1.一个class只能extends一个class(单根继承)
2.一个class可以implements多个interface
3. 一个interface可以extends多个interface
4.一个class可以在extends一个class的基础上再去implements多个interface
分享到:
相关推荐
《吉吉写作——高效创作的秘密武器》 在数字化时代,写作工具已经成为许多创作者不可或缺的伙伴。其中,“吉吉写作”以其独特的功能和优秀的用户体验,深受广大写作者的喜爱。这款软件不仅具备基本的文字编辑功能,...
【吉吉影音正版采集】是本文的核心话题,它涉及到的是一个与软件相关的技术主题,特别是与吉吉影音这款软件的数据采集和处理有关的系统或工具。吉吉影音是一款知名的多媒体播放软件,它允许用户观看和播放各种视频...
吉吉影音
【吉吉影音播放器】是一款深受用户喜爱的多媒体播放软件,尤其在V2.8.0.1这个官方版本中,它集成了多种先进的技术,为用户提供流畅、高清且稳定的观影体验。作为一款多功能的播放工具,吉吉影音支持多种视频格式,...
- **安装**:下载压缩包中的“吉吉影音播放器.exe”文件,双击运行进行安装。 - **启动与播放**:安装完成后,点击桌面快捷方式启动播放器,拖拽本地视频文件到界面或者使用菜单栏的“打开文件”选项来播放。 - *...
吉吉影音资源站采集插件
吉吉影音组抢先版
这种形式的教学方式对于视觉学习者尤其有帮助,能够让他们在实际操作环境中学习和练习。 综上所述,"吉吉音影发布端"是一个为网络视频服务提供高效管理和发布的工具,它包括了核心的发布工具软件、详细的文本教程...
去掉播放器广告,去掉速度限制,去掉流氓插件
在"飞飞CMS 2.9 带采集,已集成西瓜先锋吉吉"的描述中,我们可以提取出以下几个关键知识点: 1. **内容采集**:飞飞CMS 2.9版本内置了内容采集功能,这使得用户可以自动化地从互联网上抓取和导入相关数据,节省手动...
作为一款免费的播放器,吉吉播放器在功能上具有许多亮点,使得它在同类产品中独具优势。 首先,吉吉播放器支持的格式广泛,包括但不限于MP4、AVI、MKV、FLV、WMV、MP3、WAV等常见的多媒体文件格式。这使得用户无需...
吉吉写作是一款写作必备的辅助软件,整个软件仅仅1M多,下载、安装及移动都十分方便。她不能自动为你写出一个字来,但是她能够为你提供一个高效的写作平台,帮助你从一些烦琐的事情中解脱起来,把精力集中在创作上,...
《吉吉写作软件:创作旅途中的得力助手》 吉吉写作软件,作为一个专为作家和写作爱好者设计的工具,其强大的功能和易用性使其成为居家旅行的必备之选。这款软件集成了多种写作需求,无论是初涉文坛的新手还是经验...
飞飞cms2.8补丁 含西瓜影音先锋吉吉
本软件可以免费观看部分在网页上花费money的电影,但记住不要删掉任何东西
吉吉写作是一款写作必备的辅助软件,她不能为你写出一个字来,但是她能够为你提供一个高效的写作平台,帮助你从一些烦琐的事情中解脱起来,把精力集中在创作上,提高你的写作效率。自动保存备份功能可使你安心写作,...
本节课的教学内容为《小猴吉吉》,这是北师大版小学二年级上册语文教材中的一篇课文,旨在通过讲述小猴吉吉的故事,帮助学生在阅读中提升语言能力,同时培养他们面对困难的坚韧精神。 ### 教学目标 1. **认字读书**...