继承之成员方法成员变量之爸爸偷钱

来源:互联网 发布:nginx下载windows 64 编辑:程序博客网 时间:2024/04/27 20:39

个人对继承中成员方法成员变量的一些理解.完全从小白角度看的问题.希望能给新学JAVA继承的同学加深理解微笑如有不妥之处请各位大大加以指正.O(∩_∩)O谢谢!



package day08继承;

 

class Father {

private int num = 10;// num相当于爸爸的私房钱(加了private)

public int num2 = 20; // 这是家庭共有的钱 谁都可以花

 

private void steal() {//steal()方法相当于爸爸的独门绝技(加了private)不会轻易传给别人,哪怕是自己的儿子

System.out.println("爸爸偷东西很厉害");

}

 

public void show() {

System.out.println(num);

System.out.println(num2);

steal();// 至于这里为啥偷东西的技术又出来了?

//爸爸自己定义的展示方法,可以想象成让别人羡慕他.只是被定义成公有的,

//所以儿子也可以使用爸爸拥有的技术了

System.out.println("steal()被调用了");

}

}

 

class Son extends Father {

public void function() {

// System.out.println(num); //儿子不能用爸爸的私房钱

System.out.println(num2);

}

}

 

public class ExtendsDemo3 {

public static void main(String[] args) {

Son son = new Son();

// son.steal();//爸爸不会把偷东西这种见不得人的技术直接传承给儿子,毕竟儿子要学好习惯

son.show();

// son.function();//很明确的说过儿子不能用爸爸的私房钱,要是用的话会被打死!

}

}

运行结果:

10

20

爸爸偷东西很厉害

steal()被调用了

 总结:父类的私有方法不会被子类继承

父类的私有成员变量不能被子类访问

 

/*

继承中成员方法的关系:

A:子类中的方法和父类中的方法声明不一样,这个太简单。

B:子类中的方法和父类中的方法声明一样,这个该怎么玩呢?

通过子类对象调用方法:

a:先找子类中,看有没有这个方法,有就使用

b:再看父类中,有没有这个方法,有就使用

c:如果没有就报错。

*/

package test;

 

class Father {

public void driveCar() {

System.out.println("爸爸会开车");

}

}

 

class Son extends Father {

public void method() {

System.out.println("儿子会打LOL");

}

public void driveCar() {

System.out.println("儿子会开车");

}

}

 

class Test {

public static void main(String[] args) {

//创建对象

Son s = new Son();

s.driveCar();//儿子会开车就不麻烦爸爸了

s.method();

//s.fucntion(); //找不到符号

}

}

运行结果:

儿子会开车

儿子会打LOL

 

/*

方法重写:子类中出现了和父类中方法声明一模一样的方法。

方法重载:

本类中出现的方法名一样,参数列表不同的方法。与返回值无关。

 

子类对象调用方法的时候:

先找子类本身,再找父类。

方法重写的应用:

当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。

这样,即沿袭了父类的功能,又定义了子类特有的内容。

案例:

A:定义一个手机类。

B:通过研究,我发明了一个新手机,这个手机的作用是在打完电话后,可以听天气预报。

按照我们基本的设计,我们把代码给写出来了。

但是呢?我们又发现新手机应该是手机,所以,它应该继承自手机。

其实这个时候的设计,并不是最好的。

因为手机打电话功能,是手机本身就具备的最基本的功能。

所以,我的新手机是不用在提供这个功能的。

但是,这个时候,打电话功能就没有了。这个不好。

最终,还是加上这个功能。由于它继承了手机类,所以,我们就直接使用父类的功能即可。

那么,如何使用父类的功能呢?通过super关键字调用

*/

class Phone {

public void call(String name) {

System.out.println("给"+name+"打电话");

}

}

 

class NewPhone extends Phone {

public void call(String name) {

//System.out.println("给"+name+"打电话");

super.call(name);

System.out.println("可以听天气预报了");

}

}

 

class ExtendsDemo9 {

public static void main(String[] args) {

NewPhone np = new NewPhone();

np.call("林青霞");

}

}

 

0 0