java之旅之继承

来源:互联网 发布:广州商学院网络拓扑图 编辑:程序博客网 时间:2024/04/28 21:37

继承

继承:在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类。
这里写图片描述

类与类之间is a 的关系

父类(基类、超类)–共有属性、共有行为 ←extends子类– 特有属性、特有行为(子类指向父类)

父类所拥有的属性和行为子类自动具备,构造方法不能被继承。且没有重写,只有重载

  • 父类设计考虑共同属性和行为,子类考虑特有属性和行为;
  • java单继承
  • 不写extends,默认继承Object。

在java中所有的继承都是单继承,只有一个父类,只继承一个父类。

继承的优点:

  1. 代码可重用性
  2. 父类的属性和方法可用于子类
  3. 设计应用程序变得更加简单
  4. 子类可扩展父类的属性和方法

单继承的优点:类层次结构清晰。以后接口会提高单继承的丰富度。
单继承的缺点也就是多继承的优点:丰富度很高。

Object是所有类和数组的根类。
Object类有九个方法,目前先学三个 finalize();toString();equals();。

1、finalize()方法:销毁对象,与构造方法相反,Object方法中的GC调用,面试中经常会问到,这是属于java运行机制的问题。
2、toString()方法:返回一个对象的字符串描述。
例如:

com.lovo.bean.Employee@145c859

其中com.lovo.bean.Employee是全类名,145c859是一个引用(哈希函数加密成唯一的十六进制数),是一个十六进制的数。

当我们打印对象或在对对象做字符串操作的时候,我们这时就是在用toString()方法,而来自Object的toString()方法返回的是Object@16进制数(一个引用),而根据我们自己的需要重写toString()方法。

重写方法如下代码:

public String toString() {        // TODO Auto-generated method stub        return this.name + "住在" + this.address;    }    public static void main(String[] args) {     Employee e1 = new Employee();        e1.setName("zhang3");        e1.setAddress("四川成都一环路北二段5号3-154");        e1.setNumber(10032);        System.out.println(e1);    }

3、equals()方法:判断两个对象在业务上是否相等。两个对象的内容是否相等。

equals()与==的区别:
==:判定两个引用是否指向同一个对象。判定左、右两边的值是否相等,不能判断两个对象的内容是否相等,不是说引用不能用==比较,而是==比较的是两个对象是否相同,不是两个对象的内容是否相同。
equals()方法是Obejct类的方法,根据我们自己的需要来重写。
例如:

public boolean equals(Object obj) {        // TODO Auto-generated method stub        Employee e = (Employee)obj;        if(this.number == e.getNumber()){            return true;        }        return false;    }public static void main(String[] args) {        Employee e1 = new Employee();        e1.setName("zhang3");        e1.setAddress("四川成都一环路北二段5号3-154");        e1.setNumber(10032);        Employee e2 = new Employee();        e2.setName("zhang3");        e2.setAddress("四川成都一环路北二段5号3-154");        e2.setNumber(10032);        System.out.println(e1.equals(e2));}

方法重写—-从父类继承而来的方法,子类重新实现,只针对于行为(父子关系)。

1、方法名必须保持一致;
2、参数列表必须保持一致;
3、返回类型必须一致;
4、访问修饰符必须大于等于父类;
5、子类重写后的方法不能抛出比父类重写前的方法更多的异常(下册第一章讨论)
父类所拥有的属性和行为子类自动具备,构造方法不能被继承。且没有重写,只有重载。

重写与重载的区别:
重写:子类重写实现一次继承来的分类的方法。
重载:同一类中有不同参数列表、各有各的实现的多个同名方法。

this与super。用一张图片来解释。

这里写图片描述

继承中的内存实行内存叠加机制

如:

这里写图片描述
这里写图片描述

0 0
原创粉丝点击