其实我第一次学习java 的时候根本没有听说过组合这个名词,老师也更没有讲解过,我一直以为是我自己落掉了什么知识点,其实不是的,组合这个名词暂且把它定义为一个思维性的东西吧,相信读者都接触过了,但是并不知道它还有这个名字。

其实所谓的组合就是创建一个新类去调用已经创建并且调试好的类,那么这个新类就可以把它叫做是一个组合

例如我创建一个People

public class People {
private String name;
private int age; public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public void setAge(int age){
this.age = age;
}
}

那我现在要用这个类,我可以给这个类添加一些新的特性,这时候我们就可以创建一个新的类,然后在这个类里创建People的对象。

比如我现在创建一个类叫做Student

class Student {
People people = new People();
}

然后可以在这个类里添加一些属性,比如定义个身份为student,在这里我就不在论述了。

接下来看看继承,其实继承和组合本就有异曲同工之妙,先来看看是怎样继承的。

在java里有一个叫做extends的关键字,它可以帮助我们继承,被继承的类我们称作父类,也可以叫做基类,超类都行,而继承者我们称作子类或者派生类等等

这里我们定义一个类

public class Student extends People{
//doSomething
}

这样一来的话,该类就继承了父类的全部成员方法和成员变量,但是注意,声明为private权限的字段或者方法是不会被继承下来的。

为了证明这一点我们在student类写一个方法

public String re(){
return this.name;
}

这里编译器会报一个错"People.name is not visible",从这里就可以看出,被声明为private 的字段或者方法是不能被继承下来的,如果你想把它继承下来,可以把private改成protected,这样的话,我们就能顺利的继承下name字段。

这样我们把People里的字段全部初始化一下,只需在代码里加上这一段代码块就行了

{
this.age = 10;
this.name = "zhangsan";
}

接下来在主函数里声明出这个student

Student student = new Student();
System.out.println(student.getAge());

现在我们惊讶的发现这个写法是可行的,尽管我们没有在子类中声明任何的字段和方法,我们依然可以调用getAge();并且可以顺利的打印出10

这是因为我们没有在子类中重载任何方法,所以此时调用的是父类的getAge,也就可以轻松的访问到父类的private声明的字段了。

看完了这些相信大家对继承已经有了一个初步的认识,那么在继承机制中,各个类的构造方法又是怎么被调用的呢,答案是自父类到子类依次调用.

演示的同时我先声明三个类Temp1、Temp2、Temp3,与此同时Temp3继承自Temp2,而Temp2又继承自Temp1,这样的话,我们在各个类的构造方法里都放上一句打印的语句

//Temp1
System.out.println("i'm temp1");
//Temp2
System.out.println("i'm temp2");
//Temp3
System.out.println("i'm temp3");

为了方便我这里就这样写了,但是大家千万要注意这些是放在各个类的构造方法里的。

我们在主函数里创建一个Temp3的对象

public class Mian{
public static void main(String[] args){
Temp3 temp3 = new Temp3();
}
}

我们看控制台,打印出了

i'm temp1
i'm temp2
i'm temp3

由此可以看出先要创建temp3的对象,发现了extends关键字,然后顺着继承链往上走,找到temp2,又发现extends关键字,接着找到temp1,然后调用temp1的构造方法,接着往下挨个调用。

最新文章

  1. struts1二:基本环境搭建
  2. JAVA 多线程和并发学习笔记(四)
  3. 漫谈可视化Prefuse(三)---Prefuse API数据结构阅读有感
  4. 【POJ】2104 K-th Number(区间k大+主席树)
  5. ubuntu - chrome 标题栏, 书签乱码 解决
  6. python 判断 windows 隐藏文件/系统文件
  7. Azure 负载平衡器新分发模式
  8. jquery实现公告上下滚动显示
  9. python 多线程、多进程
  10. js编码、解码
  11. HTML5 的WebSocket
  12. Win环境下Oracle小数据量数据库的物理备份
  13. C 函数参数 char **s与char *s[]
  14. DxPackNet 4.保存音视频为本地avi文件
  15. python 字典dict类型合并(不能错过哦)
  16. java-pdf转word
  17. HDU 1074 Doing Homework (动态规划,位运算)
  18. 学习Struts2经验总结
  19. 那些年读过的书《Java并发编程的艺术》一、并发编程的挑战和并发机制的底层实现原理
  20. odoo开发笔记 -- 视图继承扩展

热门文章

  1. [转载]mysql下载安装
  2. Lua 错误 收集
  3. ZeroMQ API(一) 总序
  4. ETL 自动化测试框架
  5. 【BZOJ】2208 [Jsoi2010]连通数
  6. 去除zabbix calculate 模式下,有时候分母为零的情况(Cannot evaluate expression: division by zero. )
  7. Python中的and和or
  8. cdn_一些常用的cdn地址
  9. VUE组件相关总结!
  10. ActiveMQ监听消息并进行转发,监听不同的mq服务器和不同的队列