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 面向对象继承性的资料请关注我们其它相关文章!

(0)

相关推荐

  • 老生常谈 Java中的继承(必看)

    Java作为一面向对象的语言,具备面向对象的三大特征--继承,多态,封装. 继承顾名思义,继任,承接,传承的意思.面向对象的语言有一个好处,就是可以用生活中的例子来说明面向对象的特性.那么我们先来看看生活中的继承关系有哪些?最常见的:父母子女:汽车,电动车,自行车和车.无论哪种车,都有具备车的特性.再比如说:家里面的电饭锅,电磁炉,电冰箱.他们都属于电器类,都具有名字这个属性,也都需要用电这个方法.如果在程序中我们一个个类去把这些重复的代码都写上去,那不是浪费时间和精力吗?联系之前的知识,我们能

  • Java继承概念详细解读

    继承与合成基本概念 继承:可以基于已经存在的类构造一个新类.继承已经存在的类就可以复用这些类的方法和域.在此基础上,可以添加新的方法和域,从而扩充了类的功能. 合成:在新类里创建原有的对象称为合成.这种方式可以重复利用现有的代码而不更改它的形式. 1.继承的语法 关键字extends表明新类派生于一个已经存在的类.已存在的类称为父类或基类,新类称为子类或派生类.例如: class Student extends Person { } 类Student继承了Person,Person类称为父类或基

  • JAVA基础之继承(inheritance)详解

    继承(inheritance)是Java OOP中一个非常重要的概念.继承是在复用已存在的类的方法和域的基础上,还可以添加新的方法和域.Java用extends关键字来表示继承关系(is-a).被继承的类称为超类(superclass).基类(base class).父类(parent class),而新类被称为子类(subclass).派生类(derived class)或孩子类(child class). 1.class:编程语言中的基本单位.将数据和功能封装到了一起. 2.基类包含其所有导

  • java中继承测试代码分析

    继承:可以基于已经存在的类构造一个新类.继承已经存在的类就可以复用这些类的方法和域.在此基础上,可以添加新的方法和域,从而扩充了类的功能. public class ExtendsStu { /*动物类:动物都可以动 * 1.Dog 2.Cat * 在java中,子类可以继承父类的属性和功能; * 继承关系的指定: 子类 extends 父类 * 不能被继承的资源: * 1.子类不能继承父类的构造方法,而且必须调用一个父类的构造器(因为生成子类对象的时候会初始化父类属性) * 2.私有的资源不能

  • Java编程之继承问题代码示例

    课堂练习: –在包bzu.aa中定义一个交通工具类(Vehicle): 1.属性--载客量(capacity) 2.方法 (1)无参构造方法(给capacity初始化值为2,并输出"执行交通工具类的无参构造方法.") (2)有参构造方法(传参给capacity初始化,并输出"执行交通工具的有参构造方法.") (3)capacity的set.get方法 (4)print方法:输出capacity –在包bzu.aa中定义一个汽车类(Car)继承交通工具类: 1.属性-

  • Java面向对象编程之类的继承详解

    本文实例讲述了Java面向对象编程之类的继承.分享给大家供大家参考,具体如下: 继承:特殊类拥有一般类的全部属性与行为. 继承好处: 1.提高了代码的复用性 2.让类与类之前产生了关系,有了这个关系才有多态的特性.继承是类和类之前的关系. 注意事项: 1.java只支持单继承,不支持多继承.因为多继承有安全隐患:当多个父类定义相同的函数,但是功能不同时,子类不知道运行哪一个. 2.子类继承父类时,继承了父类的所有方法和属性,可直接使用. 3,java支持多层继承,即:孙-子-父的关系 语法: [

  • java面向对象的三大特性之一继承用法实例分析

    本文实例讲述了java面向对象的三大特性之一继承用法.分享给大家供大家参考,具体如下: Java用extends关键字表示这种继承关系. Java的继承只允许单继承,即一个类只能有一个父类. 代码: 工程师类: package com.jredu.oopch02; /** * 工程师类 * @author Administrator * */ public class Engineer { //共有的属性和方法 //子类可以继承 protected int id; protected Strin

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

    一.类的继承 A类继承B类,是指A类可以拥有B类的非私有属性和方法,同时A类也可以自己定义属性方法或重写方法以扩充自己的功能. 1.1 方法的重写 重写方法时,方法的方法名.返回值类型和参数个数及类型均需一致. 首先定义父类Animal,包含年龄.名字两个属性及吃的方法. public class Animal { int age; String name; public void eat(){ System.out.println("动物可以吃东西"); } } 通过子类Dog继承父

  • Java回调函数实例代码详解

    首先说说什么叫回调函数? 在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就 称为回调.在调用接口时,需要严格的按照定义的参数和方法调用,并且需要处理函数的异步,否则会导致程序的崩溃. 这样的解释似乎还是比较难懂,这里举个简 单的例子: 程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序.程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法.目的达到

  • Java 从网上下载文件的几种方式实例代码详解

    废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.chan

  • java多线程之停止线程的方法实例代码详解

    和线程停止相关的三个方法 /* 中断线程.如果线程被wait(),join(),sleep()等方法阻塞,调用interrupt()会清除线程中断状态,并收到InterruptedException异常.另外interrupt();对于isAlive()返回false的线程不起作用. */ public void interrupt(); /* 静态方法,判断线程中断状态,并且会清除线程的中断状态.所以连续多次调用该方法,第二次之后必定返回false.另外,isAlive()用于判断线程是否处于

  • java使用RSA与AES加密解密的实例代码详解

    首先了解下,什么是堆成加密,什么是非对称加密? 对称加密:加密与解密的密钥是相同的,加解密速度很快,比如AES 非对称加密:加密与解密的秘钥是不同的,速度较慢,比如RSA •先看代码(先会用在研究) 相关依赖: <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.58</versio

  • java匿名内部类实例代码详解

    这篇文章主要介绍了java匿名内部类实例代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Person.java package insof; public class Person extends Object{ String name; static int age; public Person() { this.name = "tom"; System.out.println("执行的是构造方法");

  • java使用FFmpeg合成视频和音频并获取视频中的音频等操作(实例代码详解)

    FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序. ffmpeg命令参数如下: 通用选项 -L license -h 帮助 -fromats 显示可用的格式,编解码的,协议的... -f fmt 强迫采用格式fmt -I filename 输入文件 -y 覆盖输出文件 -t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持 -ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持 -title

  • Java动态代理(设计模式)代码详解

    基础:需要具备面向对象设计思想,多态的思想,反射的思想: Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架.通过阅读本文,读者将会对Java动态代理机制有更加深入的理解.本文首先从Java动态代理的运行机制和特点出发,对其代码进行了分析,推演了动态生成类的内部实现. 代理模

  • Java编程Webservice指定超时时间代码详解

    WebService是一种跨编程语言和跨操作系统平台的远程调用技术 所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统(采用交互提问的方式来加深大家对此技术的理解). 远程调用技术有什么用呢?商场的POS机转账调用的转账方法的代码是在银行服务器上,还是在商场的pos机上呢?什么情况下可能用到远程调用技术呢?例如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,让第

  • Java语言中的内存泄露代码详解

    Java的一个重要特性就是通过垃圾收集器(GC)自动管理内存的回收,而不需要程序员自己来释放内存.理论上Java中所有不会再被利用的对象所占用的内存,都可以被GC回收,但是Java也存在内存泄露,但它的表现与C++不同. JAVA中的内存管理 要了解Java中的内存泄露,首先就得知道Java中的内存是如何管理的. 在Java程序中,我们通常使用new为对象分配内存,而这些内存空间都在堆(Heap)上. 下面看一个示例: public class Simple { public static vo

随机推荐