Java 中子类继承父类的语法格式如下: 修饰符 class class_name extends extend_class { // 类的主体 } 其中,class_name 表示子类(派生类)的名称;extend_class 表示父类(基类)的名称 在 Java 中,所有的继承都是公有继承 类的继承不改变类成员的访问权限,也就是说,如果父类的成员是公有的、被保护的或默认的,它的子类仍具有相应的这些特性,并且子类不能获得父类的构造方法。 如果在父类中存在有参的构造方法而并没有重载无参的构造方法,那么在子类中必须含有有参的构造方法,因为如果在子类中不含有构造方法,默认会调用父类中无参的构造方法,而在父类中并没有无参的构造方法,因此会出错。 Java 不支持多继承,只允许一个类直接继承另一个类,即子类只能有一个直接父类,extends 关键字后面只能有一个类名。 super 可以用来访问父类的构造方法、普通方法和属性。super( ) 必须是在子类构造方法的方法体的第一行。 父类:public class Person { public Person(String name, int age) { } public Person(String name, int age, String sex) { } } 子类: public class Student extends Person { public Student(String name, int age, String birth) { super(name, age); // 调用父类中含有2个参数的构造方法 } public Student(String name, int age, String sex, String birth) { super(name, age, sex); // 调用父类中含有3个参数的构造方法 } } super访问父类成员,属性和方法都这样调用 super.member super和this的区别: this 指的是当前对象的引用,super 是当前对象的父对象的引用 super 关键字的用法: super.父类属性名:调用父类中的属性 super.父类方法名:调用父类中的方法 super():调用父类的无参构造方法 super(参数):调用父类的有参构造方法 如果构造方法的第一行代码不是 this() 和 super(),则系统会默认添加 super() this 关键字的用法: this.属性名:表示当前对象的属性 this.方法名(参数):表示调用当前对象的方法 当局部变量和成员变量发生冲突时,使用this.进行区分。 向上转型 父类引用指向子类对象为向上转型,语法格式如下: fatherClass fobj = new sonClass(); 向上转型就是把子类对象直接赋给父类引用,不用强制转换。使用向上转型可以调用父类类型中的所有成员,不能调用子类类型中特有成员 向下转型 与向上转型相反,子类对象指向父类引用为向下转型,fobj是父类的对象,语法格式如下(类似强制类型转换): sonClass sobj = (sonClass) fobj; 重写:在子类中如果创建了一个与父类中相同名称、相同返回值类型、相同参数列表的方法,只是方法体中的实现不同,以实现不同于父类的功能,这种方式被称为方法重写(override),又称为方法覆盖。当父类中的方法无法满足子类需求或子类具有特有功能的时候,需要方法重写。 在重写方法时,需要遵循下面的规则: 参数列表必须完全与被重写的方法参数列表相同。 返回的类型必须与被重写的方法的返回类型相同(Java1.5 版本之前返回值类型必须一样,之后的 Java 版本放宽了限制,返回值类型必须小于或者等于父类方法的返回值类型)。 访问权限不能比父类中被重写方法的访问权限更低(public>protected>default>private)。 重写方法一定不能抛出新的检査异常或者比被重写方法声明更加宽泛的检査型异常。例如,父类的一个方法声明了一个检査异常 IOException,在重写这个方法时就不能抛出 Exception,只能拋出 IOException 的子类异常,可以抛出非检査异常。 另外还要注意以下几条: 重写的方法可以使用 @Override 注解来标识。 父类的成员方法只能被它的子类重写。 声明为 final 的方法不能被重写。 声明为 static 的方法不能被重写,但是能够再次声明。 构造方法不能被重写。 子类和父类在同一个包中时,子类可以重写父类的所有方法,除了声明为 private 和 final 的方法。 子类和父类不在同一个包中时,子类只能重写父类的声明为 public 和 protected 的非 final 方法。 如果不能继承一个方法,则不能重写这个方法。 多态: 多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。 对面向对象来说,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是大家通常所说的多态性。 Java 实现多态有 3 个必要条件:继承、重写和向上转型。
java继承和多态
最新推荐文章于 2024-04-23 20:37:00 发布