java的组合和继承
其实我第一次学习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的构造方法,接着往下挨个调用。
java的组合和继承的更多相关文章
- Java——代码复用(组合和继承)
前言 "复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它必须还能够做更多的事情." Java解决问题都围绕类展开的, ...
- 深入理解Java中的组合和继承
Java是一个面向对象的语言.每一个学习过Java的人都知道,封装.继承.多态是面向对象的三个特征.每个人在刚刚学习继承的时候都会或多或少的有这样一个印象:继承可以帮助我实现类的复用.所以,很多开发人 ...
- 关于Java中的继承和组合的一个错误使用的例子
[TOC] 关于Java中的继承和组合的一个错误使用的例子 相信绝大多数人都比较熟悉Java中的「继承」和「组合」这两个东西,本篇文章就主要就这两个话题谈论一下.如果我某些地方写的不对,或者比较幼稚, ...
- java中的继承与oc中的继承的区别
为什么要使用继承? 继承的好处: (1)抽取出了重复的代码,使代码更加灵活 (2)建立了类和类之间的联系 继承的缺点: 耦合性太强 OC中的继承 1.OC中不允许子类和父类拥有相同名称的成员变量名:( ...
- JAVA封装、继承
封装 1.概念: 将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: a.只能通过规定的方法访问数据 b.隐藏类的实例细节,方便修改和实 ...
- <Java中的继承和组合之间的联系和区别>
//Java中的继承和组合之间的联系和区别 //本例是继承 class Animal { private void beat() { System.out.println("心胀跳动...& ...
- Java中的继承
我们在以前的学习中,我们会了C#中的继承,今天我们来了解了解Java中的继承,其实都大同小异啦! 1.语法 修饰符 SubClass extends SuperClass(){ //类定义部分 } e ...
- Java面向对象的继承
继承也是面向对象的又一重要特性,继承是类于类的一种关系,通俗来说狗属于动物类,那么狗这个类就继承了动物类 java中的继承是单继承的,一个类只能继承与一个父类 子类继承父类之后,子类就拥有了父类的所有 ...
- java类的继承
继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(重写)的方式,产生一个新的类型.继承是面向对 象的三个基本特征--封装.继承.多态的其中之一,我们在使用java时编写的每一个类都是 ...
随机推荐
- appium 使用过程问题踩坑-笔记
问题1:虚拟设备选用问题 运行脚本抛出异常,创建session对象失败 排查过程:在进入cmd模式下: ①adb devices --ok ②appium-doctor --ok ③appium ...
- java selenium常用API(WebElement、iFrame、select、alert、浏览器窗口、事件、js) 一
WebElement相关方法 1.点击操作 WebElement button = driver.findElement(By.id("login")); button.clic ...
- 通过Class类获取对象实例
通过Class对象获取对象的方式是通过class.newInstance()方式获取,通过调用默认构造参数实例化一个对象. /** * Created by hunt on 2017/6/27. * ...
- HDU 3065 病毒侵袭持续中 (AC自动机)
题目链接 Problem Description 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的"万恶之源".这是一个庞大的病毒 ...
- 【译】第一篇 Integration Services:SSIS是什么
本篇文章是Integration Services系列的第一篇,详细内容请参考原文. Integration Services是一种在SQL Server中最受欢迎的子系统.允许你在各种数据源之间提取 ...
- vue-cli环境搭建初探!
1.先安装nodejs环境 https://npm.taobao.org/mirrors/node (选择版本) 下一步 下一步 默认安装就行 2.检查node和npm的是否成功安装 node -v ...
- UNIX环境高级编程 第14章 高级I/O
这一章涉及很多概念和函数,包括:非阻塞I/O.记录锁.I/O复用.异步I/O.readv和writev函数以及内存映射. 非阻塞I/O 在Unix中,可以将系统调用分为两种,一种是“低速”系统调用,另 ...
- React-Native 之 FlexBox介绍和使用
# 前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会 ...
- git内部原理
Git 内部原理 无论是从之前的章节直接跳到本章,还是读完了其余章节一直到这——你都将在本章见识到 Git 的内部工作原理 和实现方式. 我们发现学习这部分内容对于理解 Git 的用途和强大至关重要. ...
- 【Android开发日记】之入门篇(五)——Android四大组件之Service
这几天忙着驾校考试,连电脑都碰不到了,今天总算告一段落了~~Service作为Android的服务组件,默默地在后台为整个程序服务,辅助应用与系统中的其他组件或系统服务进行沟通.它跟Activity的 ...