热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Java面向对象之继承性的实例代码详解

这篇文章主要介绍了Java面向对象之继承性,文中代码简单易懂,可以更好的帮助大家学习,有兴趣的小伙伴快来了解下

一、类的继承

A类继承B类,是指A类可以拥有B类的非私有属性和方法,同时A类也可以自己定义属性方法或重写方法以扩充自己的功能。

1.1 方法的重写

重写方法时,方法的方法名、返回值类型和参数个数及类型均需一致。
首先定义父类Animal,包含年龄、名字两个属性及吃的方法。

public class Animal {
 int age;
 String name;
 public void eat(){
  System.out.println("动物可以吃东西");
 }
}

通过子类Dog继承父类Animal,并重写eat方法,在调用重写的eat方法之前,设置继承来的年龄属性值为10。

public class Dog extends Animal{
 public void eat(){
  System.out.println(age+"岁的狗狗可以吃东西");
 }
 public static void main(String[] args) {
  Dog dog1 = new Dog();
  dog1.age = 10;
  dog1.eat();//10岁的狗狗可以吃东西
 }
}

1.2 继承的初始化顺序

初始化即执行类的构造方法,在Java中,继承的初始化顺序如下:

父类的属性 > 父类的构造方法 > 子类的属性 > 子类的构造方法

public class Animal {
 int age = 10;
 public Animal(){
  System.out.println("父类Animal执行了");
  age = 20;
 }
}
public class Dog extends Animal{
 public Dog(){
  System.out.println("子类Dog执行了");
 }
 public static void main(String[] args) {
  Animal a = new Animal();
  System.out.println(a.age);
  Dog dog1 = new Dog();
 }
}

运行结果如下图所示:

当使用final关键字后,变量就成了常量,值不能被改变;方法也不能被继承使用。

二、this与super

2.1 this关键字

this关键字代表当前对象,this.属性代表操作当前对象的属性,this.方法代表调用当前对象的方法。

2.2 super关键字

super在对象内部使用,代表父类对象。如果要调用父类的属性age,使用super.age;如果要调用父类的方法eat(),使用super.eat()。如下代码所示:

public class Dog extends Animal{
 int age = 20;
 public void eat(){
  System.out.println(age+"岁的狗狗可以吃东西");
 }
 public Dog(){
  System.out.println("子类Dog执行了");
 }
 public void method(){
  super.eat();
 }
 public static void main(String[] args) {
  Dog dog1 = new Dog();
  dog1.method();//动物可以吃东西
 }
}

子类构造的过程当中,必须调用其父类的构造方法。在子类的构造方法第一句隐式的写了一句super();。

public class Dog extends Animal{
 int age = 20;
 public Dog(){
  super();//写与不写都一样,系统隐式调用
  System.out.println("子类Dog执行了");
 }
 public static void main(String[] args) {
  Dog dog1 = new Dog();
  //父类Animal执行了
  //子类Dog执行了
 }
}

如果子类的构造方法中没有显示的调用父类的构造方法,则系统默认调用父类无参的构造方法。如果显示的调用构造方法,必须在构造方法的第一行。

所以,如果子类的构造方法中既没有显示的调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。

三、Object类

Object类是所有类的父类,默认被所有类继承。

3.1 toString()

toString()方法返回对象的地址(即Hash码),如果要查看对象的属性及属性值,则可以重写toString()方法(通过eclipse菜单中source可自动生成)。

public class Dog extends Animal{
 int age = 20;
 @Override
 public String toString() {
  return "Dog [age=" + age + "]";
 }
 public static void main(String[] args) {
  Dog dog1 = new Dog();
  System.out.println(dog1.toString());//未重写方法前的结果:Dog@15db9742
  System.out.println(dog1.toString());//Dog [age=20]
 }
}

3.2 equals()

equals()方法比较的是两个对象的引用是否指向同一块内存地址。

public class Dog extends Animal{
 public static void main(String[] args) {
  Dog dog1 = new Dog();
  Dog dog2 = new Dog();
  if(dog1.equals(dog2)){
   System.out.println("两个对象相同");
  }else{
   System.out.println("两个对象不同");
  }
 }
}

输出的结果是“两个对象不同”。如果仅需判断两个对象的属性值是否相等,可以通过eclipse重写equals方法。如下代码所示:

public class Dog extends Animal{
 @Override
 public boolean equals(Object obj) {
  if (this == obj) //如果参数对象和当前对象相同,则一定相同
   return true;
  if (obj == null) //如果参数对象为空,则一定不同
   return false;
  if (getClass() != obj.getClass())//如果参数对象的类对象和当前对象的类对象不相等,则不相同
   return false;
  Dog other = (Dog) obj;//将参数进行强制转换
  if (age != other.age) //若属性值相等,则相同
   return false;
  return true;
 }
 public static void main(String[] args) {
  Dog dog1 = new Dog();
  dog1.age = 15;
  Dog dog2 = new Dog();
  dog2.age = 15;
  if(dog1.equals(dog2)){
   System.out.println("两个对象相同");
  }else{
   System.out.println("两个对象不同");
  }
 }
}

最后输出结果是,两个对象相同。

注:文章根据本站相关课程的学习笔记整理而来,有错误或其他任何问题敬请指正,欢迎共同学习交流!

以上就是详解Java面向对象之继承性的详细内容,更多关于Java 面向对象继承性的资料请关注其它相关文章!


推荐阅读
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 模块化区块链生态系统的优势概述及其应用案例
    本文介绍了相较于单体区块链,模块化区块链生态系统的优势,并以Celestia、Dymension和Fuel等模块化区块链项目为例,探讨了它们解决可扩展性和部署问题的方案。模块化区块链架构提高了区块链的可扩展性和吞吐量,并提供了跨链互操作性和主权可扩展性。开发人员可以根据需要选择执行环境,并获得奖学金支持。该文对模块化区块链的应用案例进行了介绍,展示了其在区块链领域的潜力和前景。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
  • 项目运行环境配置及可行性分析
    本文介绍了项目运行环境配置的要求,包括Jdk1.8、Tomcat7.0、Mysql、HBuilderX等工具的使用。同时对项目的技术可行性、操作可行性、经济可行性、时间可行性和法律可行性进行了分析。通过对数据库的设计和功能模块的设计,确保系统的完整性和安全性。在系统登录、系统功能模块、管理员功能模块等方面进行了详细的介绍和展示。最后提供了JAVA毕设帮助、指导、源码分享和调试部署的服务。 ... [详细]
  • 本文介绍了常用的编辑器快捷键,包括快速转换编辑器、浏览选项卡、提取本地变量和方法、编辑器窗口最大化等功能。通过使用这些快捷键,可以提高编辑器的使用效率,减少复杂度,并提升代码的可测试性。 ... [详细]
  • Struts2+Sring+Hibernate简单配置
    2019独角兽企业重金招聘Python工程师标准Struts2SpringHibernate搭建全解!Struts2SpringHibernate是J2EE的最 ... [详细]
  • 初探PLC 的ST 语言转换成C++ 的方法
    自动控制软件绕不开ST(StructureText)语言。它是IEC61131-3标准中唯一的一个高级语言。目前,大多数PLC产品支持ST ... [详细]
  • 【具体报错信息】ErrorparsingD:\android-sdks\system-images\android-22\android-wear\armeabi-v7a\devi ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 20209测试通过:eclipse安装svn插件
    网址不能用了,新的办法参考:https:quantum6.blog.csdn.netarticledetails117250800下载了最新的ecli ... [详细]
  • android ... [详细]
  • java io换行符_Java IO:为什么从stdin读取时,换行符的数字表示出现在控制台上?...
    只是为了更好地理解我在讲座中听到的内容(关于Java输入和输出流),我自己做了这个小程序:publicstaticvoidmain(String[]args)thro ... [详细]
  • Maven构建Hadoop,
    Maven构建Hadoop工程阅读目录序Maven安装构建示例下载系列索引 序  上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant ... [详细]
author-avatar
草莓公主滴窝窝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有