面向对象的三大特性之继承
2017-05-11 14:23
197 查看
继承
什么叫继承继承: 继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
通过extends关键字产生继承关系. 继承的类被称为子类(派生类),被继承的类称为父类(超类、基类).子类可以访问父类不被private修饰的属性和方法.但构造方法不能被继承
继承的好处
提高代码的复用性
使类与类之间产生关系
继承的限制性
子类与父类之间只存在单继承关系,就是一个类同时只能继承一个类.但类与类之间可以存在多重继承关系.即AextendsB,BextendsC,A类与C类之间就是多重继承关系
当子类继承父类时,不会继承父类的构造方法
当父类中的属性和方法被private修饰时,子类是不能访问的
方法的覆盖(重写)
方法的覆盖: 重写就是子类完全继承父类的方法,在子类中创建一个名称、返回值类型和参数列表与父类中的方法完全相同就叫做重写.被覆盖的方法在子类中只能通过super调用。
覆盖的原则
覆盖方法的返回类型、方法名称、参数列表必须与原方法的相同。
覆盖方法不能比原方法访问性差(即访问权限不允许缩小)。
覆盖方法不能比原方法抛出更多的异常。
被覆盖的方法不能是final类型,因为final修饰的方法是无法覆盖的。
被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
被覆盖的方法不能为static。如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足覆盖条件,那么会发生编译错误;反之亦然。即使父类和子类中的方法都是静态的,并且满足覆盖条件,但是仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。
方法的重载
方法的重载: 在Java中,同一个类中的多个方法可以有相同的名字,只要它们的参数列表不同就可以,这被称为方法重载
重载的原则
参数列表不同包括:个数不同、类型不同和顺序不同。
仅仅参数变量名称不同是不可以的。
跟成员方法一样,构造方法也可以重载。
声明为final的方法不能被重载。
声明为static的方法不能被重载,但是能够被再次声明。
简单实例:
父类:
public class Person { /** * 年龄 */ private int age; /** * 性别 */ private String sex; /** * 电话号 */ private String phoneNumber; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } }
我们在父类Person里定义了age、sex、phoneNumber三个属性,对三个属性进行了封装,只能通过get(),set()方法进行访问.
子类:
public class Student extends Person { /** * 学校 */ private String school; /** * 年级 */ private String grade; private Student student; public Student() { super(); student = new Student(); student.setAge(10);//通过继承,可以访问到父类的setAge()方法 } /** * 方法的重写 * @return */ @Override public int getAge() { return student.getAge(); } /** * 方法的重载 * @param s * @return */ public int getAge(int s){ return student.getAge(); } public String getSchool() { return school; } public void setSchool(String school) { this.school = school; } public String getGrade() { return grade; } public void setGrade(String grade) { this.grade = grade; } }
我们通过代码可以看到Student extends Person,那Student就是子类,而Person为父类.在Student类中可以访问Person非私有的方法和属性.也可以添加自己特有的属性和方法即school和grade.关于this、super这些关键字以后再讲.
相关文章推荐
- 【职坐标】java面向对象三大特性(二)——继承详解
- 面向对象三大特性之继承(二)
- Objective-C基础学习笔记(四)-面向对象的三大特性之继承
- oc学习笔记(四)面向对象-类的三大特性:封装,继承,多态
- 面向对象三大特性-继承
- 黑马程序员——OC篇(二)面向对象的三大特性(封装、继承、多态)
- 面向对象三大特性——继承
- 【java基础知识】面向对象三大特性之继承
- java语言基础(23)——面向对象三大特性(封装、继承、多态)
- python3全栈开发-面向对象的三大特性(继承,多态,封装)之继承
- OC面向对象的三大特性:封装,继承,多态
- 面向对象三大特性:封装,继承,多态(三、多态的进一步讲解)
- Java的面向对象的三大特性 封装 继承 多态
- java 面向对象三大特性(封装,继承,多态)以及抽象、接口的介绍
- 小糖出品:面向对象三大特性之继承
- Java 面向对象的三大特性之一 继承
- 深入理解Java面向对象三大特性 封装 继承 多态
- 面向对象三大特性之继承
- PHP学习笔记之继承(面向对象三大特性之一)
- 补习:C# 面向对象三大特性:封装、继承、多态