一、简介
描述:
- 现实世界中的继承无处不在。比如:动物细分有哺乳动物、爬行动物等,哺乳动物细分有灵长目、鲸目等。
- 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
- 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
- 继承关系的俩个类,一个为子类(派生类),一个为父类(基类)。
- 子类和父类之间,从意义上讲应该具有'子类 is a 父类'的关系。
- 继承使用'extends'关键字,意思为'扩展',子类是父类的扩展。
作用:
- 继承的本质在于抽象。类是对对象的抽象,继承是对某一批类的抽象。
- 提高代码的复用性。
注意:
- 父类中的属性和方法可以被子类继承。
- 子类中继承了父类中的属性和方法后,在子类中能不能直接使用这些属性和方法,是和这些属性和方法原有的权限修饰符(public/protected/default/private)相关的。
- 父类中的构造器是不能被子类继承的,但是子类的构造器中,会隐式地调用父类中的无参构造器(默认使用'super'关键字)。
- Java中类只有单继承,没有多继承! 接口可以'多继承'!
- 一个子类只能直接继承一个父类,一个父类可以被多个子类继承。
示例:
public class Son extends Father{ }
二、Object类
描述:
- Java中的每一个类都是直接或间接地继承了Object类。所以每一个类都和Object类有'is a'的关系。
注意:
- 若一个类定义时没有显式地声明继承,那么在编译成class文件后,默认会加上继承Object类。
- 在Object类中,提供了一些方法被子类继承,那么就意味着,Java中任何一个对象都可以调用这些方法。例如:toString方法、equals方法、getClass方法等。
三、'Super'关键字
Ⅰ、简介
描述:
- 在子类中可以使用'this'关键字来表示访问或调用子类中的属性或方法。
- 子类继承父类之后,使用'super'关键字就表示访问或调用父类中的属性和方法。
- 'super'关键字代表对父类对象的引用。
注意:
- 用'super'调用父类构造方法,必须是构造方法中的第一个语句。
- 'super'和'this'不能够同时调用构造方法,因为'this'也是在构造方法的第一个语句。
- 'super'只能出现在子类的方法或者构造方法中。
Ⅱ、使用
访问父类中的属性
public class Test { public static void main(String[] args) { new Student().say("王五"); }}class Person { protected String name = "张三";}class Student extends Person { private String name = "李四"; public void say(String name) { System.out.println(name);//王五 System.out.println(this.name);//李四 /* 访问父类中的属性 */ System.out.println(super.name);//张三 }}
调用父类中的方法
public class Test { public static void main(String[] args) { new Student().test(); }}class Person { public void print() { System.out.println("Person"); }}class Student extends Person { public void print() { System.out.println("Student"); } public void test() { print();//Student this.print();//Student /* 调用父类中的方法 */ super.print();//Person }}
调用父类中的构造器
public class Test { public static void main(String[] args) { System.out.println(new Student().name);//张三 }}class Person { protected String name; public Person(String name) { this.name = name; }}class Student extends Person { public Student() { /* 显式地调用父类的有参构造器。 若没有显式调用,默认会调用父类的无参构造器。 注意: 不管是显式还是隐式地调用父类的构造器,super语句一定要出现在子类构造器中第一行代码。 所以this和super不可能同时使用它们调用构造器,因为它们都要出现在第一行代码的位置。 */ super("张三"); }}
Ⅲ、'super'和'this'的区别
- 代表的事物
- this:代表所属方法的调用者对象。
- super:代表父类对象的引用空间。
- 使用前提
- this:在非继承的条件下也可以使用。
- super:只能在继承的条件下才能使用。
- 调用构造方法
- this:调用本类的构造方法。
- super:调用的父类的构造方法 。
四、方法的重写
Ⅰ、简介
描述:
- 子类继承父类,继承了父类中的方法,但是父类中的方法并不一定能满足子类中的功能需要,所以子类中需要把方法进行重写。
- 方法重写只存在于子类和父类(包括直接父类和间接父类)之间。
- 在同一个类中方法只能被重载,不能被重写。
注意:
- 方法重写的时候,必须存在继承关系。
- 父类的静态方法不能被子类重写为非静态方法 。
- 父类的非静态方法不能被子类重写为静态方法。
- 子类可以定义与父类的静态方法同名的静态方法,但这不是重写。
- 父类的私有方法不能被子类重写,子类继承父类后,是不能直接访问父类中的私有方法的,那么就更谈不上重写了。
Ⅱ、语法
规则:
- 重写时,子类中方法的方法名和参数列表,必须与要重写的父类的方法相同。
- 重写时,子类方法的权限修饰符可以在父类方法的基础上扩大,但是不能缩小。
- 重写时,子类方法的抛出异常类型的范围可以可以在父类方法的基础上缩小,但是不能扩大。
- 重写时,返回类型可以相同,也可以不同。如果不同的话,子类的方法返回类型必须是父类方法返回类型的子类型。
- 一般情况下,重写的方法会和父类中的方法的声明完全保持一致,只有方法的实现不同。
示例:
public class Test { public static void main(String[] args) { Student student = new Student(); student.run(); System.out.println(student.test()); }}class Person { public void run() { System.out.println("personRun"); } protected Object test() throws Exception { return "personTest"; }}class Student extends Person { /* 常见的方法重写示例 */ public void run() { System.out.println("studentRun"); } /* 特殊的方法重写示例 */ public String test() throws RuntimeException { return "studentTest"; }}
原文转载:http://www.shaoqun.com/a/493082.html
i号店:https://www.ikjzd.com/w/2263
feedly:https://www.ikjzd.com/w/754
wangwei:https://www.ikjzd.com/w/1744
一、简介描述:现实世界中的继承无处不在。比如:动物细分有哺乳动物、爬行动物等,哺乳动物细分有灵长目、鲸目等。继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。继承关系的俩个类,一个为子类(派生类),一个为父类(基类)。子类和父类之间,从意义上讲应该具有'子类isa父类'的关系。继承使用'
oklink:oklink
let go:let go
亚马逊开店难度升级,视频验证将全面普及?:亚马逊开店难度升级,视频验证将全面普及?
江苏省文化和旅游厅召开江苏省大运河文化遗产保护传承专项规划:江苏省文化和旅游厅召开江苏省大运河文化遗产保护传承专项规划
Facebook广告投放知多少:Facebook广告投放知多少
没有评论:
发表评论