面向对象的三大特性之继承
来源:互联网 发布:奥兰多安全知乎 编辑:程序博客网 时间:2024/04/28 11:09
继承
什么叫继承
继承: 继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
通过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这些关键字以后再讲.
1 0
- 面向对象三大特性之 继承
- 面向对象三大特性之继承
- 面向对象三大特性之继承
- 36 面向对象的三大特性之继承性
- java面向对象的三大特性之继承
- 面向对象的三大特性之继承
- Java面向对象的三大特性之--《继承》
- 面向对象的三大特性之(二)继承
- PHP面向对象编程三大特性之继承特性
- 黑马程序员----------面向对象三大特性之继承
- 小糖出品:面向对象三大特性之继承
- java基础-面向对象三大特性之继承实例
- Java面向对象三大特性之继承
- java-面向对象编程-三大特性之继承
- 面向对象三大特性之继承(二)
- 【java基础知识】面向对象三大特性之继承
- javase面向对象三大特性之继承
- 面向对象三大特性---继承
- 安卓回调函数解决不同类之间函数调用和数据通信的问题
- 应用程序中破解微信数据库做数据分析
- appium ios 真机
- java 中对象序列化与反序列化的乱码问题
- 排列和组合问题完全解析
- 面向对象的三大特性之继承
- 属性“?android:attr/activatedBackgroundIndicator”工作
- 【转载】----在 Ubuntu 14.04 下安装 mysql 5.7.10
- 自动装箱 autoBoxing
- golang时区转换
- kafka 运行问题:kafka.common.KafkaException: Failed to acquire lock on file .lock 的处理
- linux系统一键安装php运行环境apache,mysql等
- 大无线大前端
- 【Spring】定时任务详解实例-@Scheduled