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

 更新时间:2020年05月29日 16:27:24   作者:亚努人  
这篇文章主要介绍了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 面向对象继承性的资料请关注脚本之家其它相关文章!

相关文章

  • 基于ArrayList源码解析(基于JDK1.8)

    基于ArrayList源码解析(基于JDK1.8)

    这篇文章主要介绍了关于ArrayList源码解析(基于JDK1.8),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Mybatis全面分页插件

    Mybatis全面分页插件

    这篇文章主要为大家详细介绍了Mybatis全面分页插件的使用方法,比较适用于在分页时候进行拦截,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • IntelliJ idea 如何生成动态的JSON字符串(步骤详解)

    IntelliJ idea 如何生成动态的JSON字符串(步骤详解)

    这篇文章主要介绍了IntelliJ idea 如何生成动态的JSON字符串,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java中HashMap如何解决哈希冲突

    Java中HashMap如何解决哈希冲突

    本文主要介绍了Java中HashMap如何解决哈希冲突,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 详解Java的Hibernate框架中的set映射集与SortedSet映射

    详解Java的Hibernate框架中的set映射集与SortedSet映射

    这篇文章主要介绍了详解Java的Hibernate框架中的set映射集与SortedSet映射,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-12-12
  • Java ArrayList.add 的实现方法

    Java ArrayList.add 的实现方法

    这篇文章主要介绍了Java ArrayList.add 的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • java集合_浅谈Iterable和Iterator的区别

    java集合_浅谈Iterable和Iterator的区别

    下面小编就为大家带来一篇java集合_浅谈Iterable和Iterator的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • 23种设计模式(3) java原型模式

    23种设计模式(3) java原型模式

    这篇文章主要为大家详细介绍了23种设计模式之java原型模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Spring 框架中注入或替换方法实现

    Spring 框架中注入或替换方法实现

    这篇文章主要介绍了Spring 框架中注入或替换方法实现,非常不错,具有参考借鉴价值,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-05-05
  • BufferedReader中read()方法和readLine()方法的使用

    BufferedReader中read()方法和readLine()方法的使用

    这篇文章主要介绍了BufferedReader中read()方法和readLine()方法的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04

最新评论