java 类的继承

面向对象的三大特征:继承封装多态

Java的继承通过 extends关键字实现的,实现继承的类为子类(派生类),被继承的类为父类(基类或超类)。

集成的分类 A 单继承----子类只能有一个父类

B多重继承---------子类可以有多个直接父类。

Java不允许多重继承 转变成回字符串

[修饰符] class 子类名 extends 父类名{

//子类子类继承父类的语法格式

代码部分

}

5.1 编写程序示范子类继承父类的特点。

public class Animal{

public double weight;

public void eat(){

System.out.println("动物在吃东西");

}

}

public class Dog extends Animal{

public void say(){

System.out.pringln(“狗叫:汪汪汪”);

}

public static void main(String[] args) {

Dog d= new Dog();

d.weight = 150;

d.eat();

d.say();

}

}

重写父类方法

¯ 重写父类的方法

子类扩展父类--总是以父类为基础,额外增加新的属性和方法。但有一种情况例外:子类需要重写父类的方法。

5.2 子类重写父类的方法

public class Bird{

public void fly(){

System.out.println("我在飞");

}

}

public class Ostrich extends Bird{

//重写Bird类的fly方法----方法覆盖(override

public void fly(){

System.out.println("我只能在地上奔跑");

}

public static void main(String[] args){

Ostrich os = new Ostrich();

os.fly(); //调用的是Birdfly还是Ostrichfly

}

}

子类扩展父类-----总是以父类为基础,但是有一种特殊:子类要重写父类。(方法覆盖 overrde

重载 overload

重写的方法遵循“三同一小一大”

三同:方法名相同 形参类表相同 返回值相同

一大:子类方法的访问权限大于或等于父类的访问权限。

重载 是在同一个类中的多个方法的关系。重写是在子类和父类间的。

如果在子类方法中调用父类被覆盖的实例方法。用super作为关键字他是直接默认的引用。

This不能出现在static修饰的方法

super访问覆盖父类的子类

子类构造方法调用父类构造方法

1 子类构造方法执行体的第一行代码使用super显示调用父类构造方法,系统将根据super调用里传入的实参类表调用父类对应的构造方法

2 子类构造方法执行体的第一行代码使用this显示调用本类中重载的构造方法,系统将根据this调用里传入的实参列表调用里传入的实参类表调用本类中另一个构造方法。执行本类中另一个构造方法时即会调用父类的构造方法

3 子类构造方法执行体中既没有super调用也没有this调用,系统将会在执行子类构造方法前,隐士调用父类无参数的构造方法。

创建任何java对象时,最先执行的总是javaLangObject

当子类方法覆盖父类方法后子类的对象将无法访问父类中被覆盖的的方法,

如果父类方法具有private访问权限,则该方法对其子类是隐藏的,其子类将无法访问该方法,也无法重写

Static修饰的方法属于类

¯ 方法重写和方法重载的区别

µ 覆盖是子类和父类之间的关系;而重载是同一类内部多个方法之间的关系。

µ 覆盖一般是两个方法间的,而重载可能有多个重载的方法。

µ 覆盖的方法有相同的方法名和形参表;而重载的方法只能有相同的方法名,不能有相同的形参表。

µ 覆盖时根据调用它的对象来区分方法;而重载是根据形参表来决定调用的是哪个方法。

¯ 父类实例的super引用
如果需要在子类方法中调用父类被覆盖的实例方法,可以用super作为调用者来调用父类被覆盖的实例方法。

public classOstrich extends Bird{

… … //子类中原有的内容

public voidcallOverridedMethod(){

super.fly(); //输出我在飞

}

… …

}

注意:

ü superJava提供的一个关键字,它是直接父类对象的默认引用。

ü 正如this不能出现在static修饰的方法中一样,super也不能出现在static的方法中

ü 如果子类定义了和父类同名的属性,也会发生子类属性覆盖父类属性的情形。子类的方法直接访问该属性时,都会访问到覆盖属性,无法访问父类被覆盖的属性---通过super来访问父类被覆盖的属性

ü 调用父类构造方法
子类不会继承父类的构造方法,但有的时候子类构造方法里需要调用父类构造方法的初始化代码。

写出下面程序的执行结果。

class Base{

protecteddouble size

publicBase(){

size=0; System.out.println(“Base类无参构造”);

}

publicBase(double s){

size=s;System.out.println(“Base类有参构造”);

}

}

public class Sub extends Base{

privateString color;

publicSub(){

color=“blue”;System.out.println(“Sub类无参构造”);

}

publicSub(String c){

color=c;System.out.println(“Sub类有参构造”);

}

publicstatic void main(String[] args){

Sub s1=new Sub(); Sub s2=new Sub(red);

}

}

注意:super调用和this调用很像,区别在于super调用的是其父类的构造方法,而this调用的是同一个类中重载的构造方法。因此,使用super调用父类构造也必须出现在子类构造执行体的第一行,所以this调用和super调用不会同时出现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值