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语言实现经典《复杂迷宫》游戏,文中采用了swing技术进行了界面化处理,感兴趣的小伙伴可以动手试一试...2022-02-01
java 运行报错has been compiled by a more recent version of the Java Runtime
java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)...2021-04-01- 这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
- 这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
- 说起C#和Java这两门语言(语法,数据类型 等),个人以为,大概有90%以上的相似,甚至可以认为几乎一样。但是在工作中,我也发现了一些细微的差别...2020-06-25
- 这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
- 这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
java 画pdf用itext调整表格宽度、自定义各个列宽的方法
这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31- 这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
- 这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较)
这篇文章主要介绍了Java使用ScriptEngine动态执行代码,并且分享Java几种动态执行代码比较,需要的朋友可以参考下...2021-04-15- 这篇文章主要介绍了Java开发实现人机猜拳游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-03
- 这篇文章主要介绍了Java List集合返回值去掉中括号('[ ]')的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-29
Java 8 Stream 的终极技巧——Collectors 功能与操作方法详解
这篇文章主要介绍了Java 8 Stream Collectors 功能与操作方法,结合实例形式详细分析了Java 8 Stream Collectors 功能、操作方法及相关注意事项,需要的朋友可以参考下...2020-05-20Java中lombok的@Builder注解的解析与简单使用详解
这篇文章主要介绍了Java中lombok的@Builder注解的解析与简单使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-06- 下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。...2016-03-28
- 这篇文章主要介绍了Java连接数据库oracle中文乱码解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-16
- 这篇文章主要介绍了Java线程池中的各个参数如何合理设置操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-19