一、访问权限

java中有三个访问权限修饰符private;protected;public和一个默认default(不加修饰符)。

如果子类的方法覆盖了父类的方法,那么子类中该方法的访问级别不允许低于父类的访问级别。这是为了确保可以使用父类实例的地方都可以使用子类实例,也就是确保满足里氏替换原则。

字段绝不能是共有的,因为这么做的话就失去了对这个字段修改行为的控制,客户端可以对其随意修改;可以使用共有的getter和setter方法来替换共有字段。

但是也有例外,如果是包级私有的类或者私有的嵌套类,那么直接暴露成员不会有特别大的影响。

public class AccessWithInnerClassExample {

    private class InnerClass{    //私有嵌套类
int x;
} private InnerClass innerClass; public AccessWithInnerClassExample(){
innerClass = new InnerClass();
} public int getValue(){
return innerClass.x;
}
}

二、抽象类与接口

抽象类:

抽象类不一定包含抽象方法,抽象方法一定位于抽象类中;抽象类和普通类的最大区别是:抽象类不能被实例化,需要继承抽象类才能实例化其子类。

接口:

接口的成员(字段+方法)默认都是public的,并且不允许定义为private或者protected;

接口的字段默认都是static和final的(接口中无变量声明,只有常量,因为用了final修饰符);

接口的方法默认都是abstract的,从Java8开始,接口方法也支持default和static修饰,但是使用默认的方法和静态的方法必须有方法体。

public interface InterfaceExample {

    default void fun1(){    //默认方法
//这里是方法体,虽然没有语句
} static void fun2(){ //静态方法
//这里是方法体,虽然没有语句
}
}

比较:

  • 从设计层面上看,抽象类提供了一种 IS_A 关系,那么就必须满足里氏替换原则,即子类对象必须能够替换掉所有父类对象。而接口更像是一种 LIKE_A 关系,它只是提供一种方法实现契约,并不要求接口和实现接口的类具有 IS_A 关系(接口可以让不相关的类都实现一个方法);
  • 从使用上看,一个类可以实现多个接口,但是不能继承多个抽象类;
  • 接口的字段只能是static和final类型的,而抽象类的字段没有这种限制;
  • 接口的方法只能是public的,而抽象类的方法可以有多种访问权限。

三、super

访问父类的构造函数:可以使用super()访问父类的构造函数,从而完成一些初始化的工作;

访问父类的成员:如果子类覆盖了父类中的某个方法的实现,可以通过使用super关键字来引用父类的方法实现。

四、重写与重载

重写存在于继承体系中,指子类实现了一个与父类在方法声明上完全相同的一个方法;

重载存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。(返回值不同,其他都相同不算是重载)

Java基础:(四)继承的更多相关文章

  1. 第二十八节:Java基础-进阶继承,抽象类,接口

    前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...

  2. Java基础-四要素之一《继承》

    继承的概念: 继承在本职上是特殊——一般的关系,即常说的is-a关系.子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法. 继承是所有OOP语言不可缺少的部分,在java中使 ...

  3. Java基础学习-- 继承 的简单总结

    代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...

  4. Java基础(四) StringBuffer、StringBuilder原理浅析

    StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢? 关于String的讲解请看Java基础 ...

  5. java基础之继承(一)

    虽然说java中的面向对象的概念不多,但是具体的细节还是值得大家学习研究,java中的继承实际上就是子类拥有父类所有的内容(除私有信息外),并对其进行扩展.下面是我的笔记,主要包含以下一些内容点: 构 ...

  6. java 基础 四种权限修饰符

    /** * Java有四种权限修饰符: * public > protected > (default) > private * 同一个类 YES YES YES YES * 同一个 ...

  7. Java基础:继承,封装,多态,抽象类,接口

    只要是从事Java语言有关的开发工作,在面试中难念会被问到这几个东西. 博主学习java有两年多了,算是浅显的知道一些,抄写了一些解释分享一下. 1.什么是面向对象?(面对女朋友) 面向对象(Obje ...

  8. Java基础-四要素之一《多态》

    什么是多态 指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的 ...

  9. 三、Java基础---------关于继承、构造函数、静态代码块执行顺序示例讲解

    在上节博客中曾提到过类的继承,这篇文章主要是介绍类的继承.构造函数以及静态代码块的执行顺序. 首先接着分析在黑马基础测试中的一个关于继承的题目,题目描述如下: 声明类Person,包含2个成员变量:n ...

  10. 【Java基础】继承的一些总结

    什么是继承 把一些类的具有共性的东西剥离出来形成一个新的类,然后各个其他类保留自己独有的特性,并用关键字extends继承这个剥离出来的新的类,可以最终达到各类原始相同效果,但是在每个类中,单用一个“ ...

随机推荐

  1. django 自定义日志配置

    如果不想使用 python 的 dictConfig 格式来配置 logger,可以制定自己的配置架构. LOGGING_CONFIG 配置定义了用来配置 django logger 的可调用函数,默 ...

  2. Oracle表空间维护总结

    1. 概念:表空间:最大的逻辑存储文件,与物理上的一个或多个数据文件对应,每个数据库至少拥有一个表空间,表空间的大小等于构成表空间的所有数据文件的大小总和,用于存储用户在数据库中存储的所有内容. 2. ...

  3. C++常见错误总结

    1.  error C2871: 'std' : does not exist or is not a namespace 原来 C++有两个不同版本的头文件.引入名字空间这个概念以前编译器用的是#i ...

  4. InnoSetup自动检测并安装.Net Framework

    InnoSetup可在在脚本中插入[Code]代码段,其中的代码可以通过事件驱动,支持的主要事件如下: function InitializeSetup(): Boolean; ——安装程序初始化,返 ...

  5. 《Java多线程编程核心技术》读后感(五)

    下面验证上面三条结论 验证第一条结论: package Second; public class MyObject { } package Second; public class Service { ...

  6. [转]C/C++获取当前系统时间

    原文转自:http://www.cnblogs.com/mfryf/archive/2012/02/13/2349360.html 个人觉得第二种还是比较实用的,而且也是最常用的~ 不过当计算算法耗时 ...

  7. opengl1

    OpenGL Programming Guide Programming Guide > Chapter 1 Chapter 1 Introduction to OpenGL Chapter O ...

  8. Sharepoint2013搜索学习笔记之设置业务数据内容源(六)

    Sharepoint搜索爬网组件支持爬Business Data Connectivity Service 承载的外部数据,关于Business Data Connectivity Service设置 ...

  9. 防止APP退到被安卓系统清理

    一个是尽量提高APP权限,无非就是保持APP始终界面在前台 二是使用守护进程方法,被清理了立刻自己启动, 三是前台跟后台进程分开,被重启了恢复原始环境. // 申请设备电源锁,在服务start的时候. ...

  10. Codeforces86D【莫队算法】

    题意: 给一个序列和一些区间,每次询问对区间所有不同的数,求每个不同的出现的个数的平方*其值的总和 2*2*1+1*1*2 思路: 裸的莫队算法. 补: 1.cmp写错. 2.LL运算不会进行转化. ...