1:关于继承
为了保证父类的良好封装性,不会被子类随意改变,设计父类时通常隐藏父类的内部数据,把父类属性改为private
如果父类中可以被重写,但不希望被其他类自由访问可用protected修饰;
2:什么时候派生子类?
简而言之就是 如果子类需要额外增加新的属性;或者有新的行为方式那么可以派生新类,注意如果是只通过在父类中增加一个新的属性值就可以解决的问题就不要派生了;
3:使用组合派生新的类
示例如下:本例不太合适只作为示例

示例代码

一般而言,继承是对已有的类进行补充改造获取一个特殊的版本;组合则是将两个具有明确整体局部关系的事物,采用组合关系实现复用;
使用组合关系来实现复用需要创建对象例如上边实现Bird时的里边用到了Animal1这个类,此时使用组合并没有增大系统的开销,因为即便通过继承来实现,也需要隐式的创建一个父类对象;而在此例子中只不过通过显式手动创建一个嵌入类的对象(也就是Animal1)
4:初始化块和构造器
初始化块在构造器之执行;
使用小方法:如果要定义两个构造器,那么相同的部分可以拿出来放在初始化块中<<<<<<<<<--------
初始化块可以用static修饰成为静态初始化块;

有意思的例子值得分析:

 class Root
{
static{
System.out.println("Root的静态初始化块");
}
{
System.out.println("Root的普通初始化块");
}
public Root()
{
System.out.println("Root的无参数的构造器");
}
}
class Mid extends Root
{
static{
System.out.println("Mid的静态初始化块");
}
{
System.out.println("Mid的普通初始化块");
}
public Mid()
{
System.out.println("Mid的无参数的构造器");
}
public Mid(String msg)
{
//通过this调用同一类中重载的构造器
this();
System.out.println("Mid的带参数构造器,其参数值:" + msg);
}
}
class Leaf extends Mid
{
static{
System.out.println("Leaf的静态初始化块");
}
{
System.out.println("Leaf的普通初始化块");
}
public Leaf()
{
//通过super调用父类中有一个字符串参数的构造器
super("parameter one");
System.out.println("执行Leaf的构造器");
} } public class Test
{
public static void main(String[] args) {
new Leaf();
new Leaf(); }
}
output:

示例代码

Root的静态初始化块 **
Mid的静态初始化块 * 类的初始化 总是限制性最顶层的父类的静态初始化快依次向下执行
Leaf的静态初始化块 **

Root的普通初始化块 ***
Root的无参数的构造器 *
Mid的普通初始化块 **对象的初始化向执行初始化快部分然后执行构造器当然还是想从父类开始依次向下
Mid的无参数的构造器    *
Mid的带参数构造器,其参数值:parameter one *
Leaf的普通初始化块 ***

执行Leaf的构造器 ***
Root的普通初始化块 *
Root的无参数的构造器 *
Mid的普通初始化块 **同上因为已经类已经初始化化完毕了,就不用再进行初始化;
Mid的无参数的构造器 *
Mid的带参数构造器,其参数值:parameter one *
Leaf的普通初始化块 *
执行Leaf的构造器 ***

Java 学习 第四篇;面向对象(1)的更多相关文章

  1. 从.Net到Java学习第四篇——spring boot+redis

    从.Net到Java学习系列目录 “学习java已经十天,有时也怀念当初.net的经典,让这语言将你我相连,怀念你......”接上一篇,本篇使用到的框架redis.FastJSON. 环境准备 安装 ...

  2. Java学习第四篇:数组,排序,查找

    一.数组 1.一维数组 (1).数组的定义 数据类型 数组名[]=new 数据类型[大小] public class Demo1 { public static void main(String[] ...

  3. 从.Net到Java学习第十一篇——SpringBoot登录实现

    从.Net到Java学习系列目录 通过前面10篇文章的学习,相信我们对SpringBoot已经有了一些了解,那么如何来验证我们的学习成果呢?当然是通过做项目来证明啦!所以从这一篇开始我将会对之前自己做 ...

  4. Java学习之反射篇

    Java学习之反射篇 0x00 前言 今天简单来记录一下,反射与注解的一些东西,反射这个机制对于后面的java反序列化漏洞研究和代码审计也是比较重要. 0x01 反射机制概述 Java反射是Java非 ...

  5. Java学习之jackson篇

    Java学习之jackson篇 0x00 前言 本篇内容比较简单,简单记录. 0x01 Json 概述 概述:JSON(JavaScript Object Notation, JS 对象简谱) 是一种 ...

  6. Java学习之注解篇

    Java学习之注解篇 0x00 前言 续上篇文章,这篇文章就来写一下注解的相关内容. 0x01 注解概述 Java注解(Annotation)又称Java标注,是JDK5.0约会的一种注释机制. 和J ...

  7. 从.Net到Java学习第八篇——SpringBoot实现session共享和国际化

    从.Net到Java学习系列目录 SpringBoot Session共享 修改pom.xml添加依赖 <!--spring session--> <dependency> & ...

  8. 从.Net到Java学习第七篇——SpringBoot Redis 缓存穿透

    从.Net到Java学习系列目录 场景描述:我们在项目中使用缓存通常都是先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回.这个时候如果我们查询的某一个数 ...

  9. 从.Net到Java学习第三篇——spring boot+mybatis+mysql

    从.Net到Java学习第一篇——开篇 环境:mysql5.7 新建mysql数据库demo,然后执行如下sql脚本进行数据表创建和数据初始化: -- ------------------------ ...

随机推荐

  1. Android使用xml中定义的动画效果

    Animation animation = AnimationUtils.loadAnimation(getActivity(), R.anim.zqrl_out); animation.setFil ...

  2. poj3537--Crosses and Crosses

    题意:有个一维棋盘,两人轮流下棋,然后谁连成三个谁赢 记得去年fj夏令营有见过这题,但是太弱了, 不会做. 记忆化搜索,如果n<=3肯定先手必胜,递推即可. #include<iostre ...

  3. Page Controller页面控制器实现

    A Page Controller is one object or file declaration designed to handle the request for one logical w ...

  4. VS如何关闭 ReSharper 提示

    IDE->工具->选项->click "suspend now" button

  5. poj1552

    Doubles Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18824   Accepted: 10846 Descrip ...

  6. jsp判断session中的值

    方法有两种: 假设,此session的名字叫adminAccount 1.EL表达式 <script type="text/javascript"> if($.trim ...

  7. hdu 5612 Baby Ming and Matrix games(dfs暴力)

    Problem Description These few days, Baby Ming is addicted to playing a matrix game. Given a n∗m matr ...

  8. hdu 3711 Binary Number(暴力 模拟)

    Problem Description For non-negative integers x and y, f(x, y) , )=,f(, )=, f(, )=. Now given sets o ...

  9. androidHandler讲解

    秒钟还没有完成的话,会收到Android系统的一个错误提示  "强制关闭".  这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,Android主线程是 ...

  10. NET基础课-- 类型基础(NET之美)

    1.类型:值类型  引用类型. 分类依据:类型在内存的分配方式.值类型在堆栈,引用类型在托管堆. 名词:栈--所有变量都会被分配在栈上,只不过值类型直接含有数据,引用类型含有一个指向托管堆对象的地址. ...