[Java之四]继承的扩展

[Java之四]继承的扩展
————-今天又是Java的基本概念的扩展。

学习学习,学着学着我们发现,一些概念我们会有新的理解,或者我们发现我们的概念知识不够用了,那么我们就需要来扩展了。

一.访问权限

对于回顾,请看我的第二篇文章,[Java之二]继承与接口。那么今天我们单讲继承。

<1>在那一篇文章中,我们看到了这样一个注意的点:

[Java之四]继承的扩展
我们所要强调的是,一个子类一旦继承了一个父类,那么那个子类就拥有了那个父类的所有的属性和方法。可是,我们发现,我的父类的属性在某些访问权限下,我们无法使用(访问到)这个属性。

比如这种情况:

[Java之四]继承的扩展
建了一个父类Computer,其中要注意的是,类型(type)这个属性,我们给他的访问权限是:private。接下来:

[Java之四]继承的扩展
我们让一个子类(Ipad)来继承它(Computer)。如我们要调用这个子类会发生什么呢?
[Java之四]继承的扩展

看:i.name=”APPLE”; 报错了。

这个的原因出现在访问权限上。

<2>访问权限有哪些?

public :公共的

private:隐私的

默认的

protected:受保护的

访问修饰符的作用是用来定义属性和方法的访问权限的

其它们的权限是:

[Java之四]继承的扩展

如果想让上面的例子不报错,那么我们需要将访问权限改为可以访问的就可以了。

二.重写

<1>一句话,什么是重写:一个子类继承了一个父类,发现父类的方法不是很适合子类的情况,那么我们就需要将父类的方法进行重写,来满足子类的需求。

一句话,举个栗子:Computer(电脑)这个父类的方法有,“打字”。而子类Ipad(平板)这个的方法也有“打字”。不过iPad的打字和copmuter的“打字”是不同的,一个是虚拟键盘,一个是实体键盘,则他们的方法“打字”还是有所区别的。

那么重写需要注意什么呢?

<2>方法重写的条件:

1.必须要有继承关系;

2.重写方法时子类方法的访问修饰符必须要大于或者等于父类方法的访问修饰符;

3.重写方法时子类方法的返回值类型,方法名,参数都必须要和父类的一致。

我们拿上面那个Comoputer的例子来看一下:

它的子类是Ipad

[Java之四]继承的扩展

he1

这样就重写了父类的方法。

<3>重写的调用:

子类和父类都会有同一个名字的方法,确定调用的是子类的还是父类的,需要根据

new关键字后的类名来决定,如果new关键字后的类名是子类,那么调用的就是

子类的方法,如果new关键字后的类名是父类的,那么调用的就是父类的方法。

子类重写父类的方法后,当你实例化子类的对象后,然后用对象名去调用方法时

只能调用子类重写的方法,父类的方法是不能被调用的。

<4.>想要父类的方法和子类的方法都执行怎么实现呢?

在重写的方法中使用super关键字来调用父类中的方法(和上一篇的this进行对照)

this是表示当前类

super是表示此类的父类,调用格式为:super.方法名

三.自动转型

<1>先提一个问题:我们总是一个问题接着一个问题,这次的问题是:我们如果需要使用一个方法,这个方法是对于父类来使用的,那么如果这个父类的子类想要使用它,可以吗?

我们如果这个子类无法使用这个方法,那么我们会发现,我们要写的代码会有很多,那么我们每一个子类为了使用这个方法,都需要为这个子类去书写特有的方法。很累,不是吗?

<2>解决方法:Java给我们提供了一解决方法就是【自动转型】,让这个子类在需要的时候可以,转为父类,来继续加以运用。

<2.1>自动转型的条件:

1.要实现自动转型就必须要有继承关系。

2.自动转型只能是子类的类型向父类的类型进行转型;

3.只能是小范围的数据向大范围的数据进行转型

byte(8bit)—–>,short(16bit)———–>int(32bit)———>long(64bit)

<2.2>自动转型的格式:

格式一:父类 对象名 = new 子类构造方法(参数值,…);

格式二:我们先建立一个方法,这个方法是给父类的:

public void 方法名(父类 对象名){

对象名.方法名();

}

我们再建立一个对象,它最终都是【 new 子类构造方法(参数值,…); 】结尾

· 父类名 对象名A = new 子类构造方法(参数值,…);

子类名 对象名B = new 子类构造方法(参数值,…);

方法名(对象名A);

方法名(对象名B);

可以达到,子类可以自动转型为父类。

四.项目实验

如果可以我希望每个知识点浏览完之后可以,自己去写一些程序,来练习一下

这次的程序项目是:

和暴君进行PK,直到一方的血量为0时结束战斗,输出谁胜利了

如果鲁班胜利,鲁班和鲁班进行PK,直到一方的血量为0时结束战斗,输出谁胜利了

如果暴君胜利,暴君和大龙进行PK,直到一方的血量为0时结束战斗,输出谁胜利了

技能 攻击力1~10

类和对象的以及类的继承的技术点都要使用上来。

(以上)