一.java继承改进

首先,多继承的缺点:
1.继承多个父类,父类中方法名相同,产生歧义
2.父类中方法同名,子类未覆盖,也会歧义

所以,java改进,类只能单继承,接口可以多继承
接口中只有抽象方法和静态常量
1.抽象方法只能在实现接口类中实现,调用时调用实现类的方法
2.静态变量在编译期间将确定调用关系了,存在冲突也会在编译的时候提示错误
,而且引用变量一般直接使用类名或接口名,避免产生歧义。

1.1继承的初始化

继承关系是传递的。如,类C继承类B,类B继承类A,则类C既有从类B继承下来的变量和方法,也有从类A中继承下来的变量和方法,也可以有自己的变量和方法。继承下来的变量和方法尽管是隐式的,但仍是C的变量和方法。

构造方法是按照先超类后子类的方法进行的,所有超类会在子类访问它之前进行正确的初始化。

1.2super关键字

/*
super关键字
1.定义父类(Father)类
2.定义son类extends Father类
3.创建Son类对象
注意:
1.this和super很像,只能在有对象的前提下使用,不能在静态上下文使用
2.子类的构造函数默认第一行会调用父类无参数构造函数,隐式语句,super(),
如果父类无参数构造函数不存在,编译报错
3.构造函数间的调用智能放在第一行,只能调用一次。super()和this()不能同时存在构造函数第一行
题目
如果开发者自定义了一个类,没有显示的进行类的继承,那么该类中成员函数是否可以使用super关健健字?
答案:可以使用,继承了Object类,Object类是所有类的父类。 重载(overload)和重写(override)
重载:
前提:所有重载函数必须在同一个类中
特点:函数名相同,参数列表不同,其他无关(访问控制符,返回值类型)
重写:
前提:继承
特点:函数名相同,参数列表相同
子类的返回值类型要小于或等于父类的返回值类型
*/
class Super
{
public static void main(String[] args)
{
Son bigHead=new Son(11);
bigHead.run();
System.out.println("Hello World!");
}
} class Father
{
int x=1; Father()
{
System.out.println("这是父类无参数构造");
} Father(int x)
{
this.x=x;
System.out.println("这是父类有参数构造");
} void speak()
{
System.out.println("我是父亲");
}
} class Son extends Father
{
int y=0; Son()
{
System.out.println("这是子类无参数构造");
} Son(int y)
{
this.y=y+x;
System.out.println("这是子类有参构造函数");
} void run()
{
super.speak(); //访问父类的函数
System.out.println("我是儿子"+"今年"+y+"岁");
}
}

Java继承改进的更多相关文章

  1. 学习博客之Java继承多态接口

    这一篇博客主要是对软工前一阶段学习的总结,主要是对Java的学习总结,包括三部分:Java的继承.多态和接口 Java的继承 继承是面向对象的三大特性之一,能够实现软件的复用. Java子类继承父类的 ...

  2. Java继承与组合

    Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...

  3. JAVA继承时构造函数的问题

    今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan ...

  4. Java继承和接口

    接口最关键的作用,也是使用接口最重要的一个原因:能上溯造型至多个基础类.使用接口的第二个原因与使用抽象基础类的原因是一样的:防止客户程序员制作这个类的一个对象,以及规定它仅仅是一个接口.这样便带来了一 ...

  5. Java继承的初始化

    /** * Created by xfyou on 2016/11/2. * Java继承的初始化 */ public class Beetle extends Insect { int k = pr ...

  6. Java—继承、封装、抽象、多态

    类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...

  7. java继承关系中成员变量,构造方法,成员方法的关系

    Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单写那个名字就访问那个名字! b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢? 子 ...

  8. JAVA继承时this和super关键字

    JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父 ...

  9. JAVA 继承中的this和super

    学习java时看了不少尚学堂马士兵的视频,还是挺喜欢马士兵的讲课步骤的,二话不说,先做实例,看到的结果才是最实际的,理论神马的全是浮云.只有在实际操作过程中体会理论,在实际操作过程中升华理论才是最关键 ...

随机推荐

  1. uboot搬移部分和重定位部分的代码分析

    来看一下搬移部分和重定位部分的代码: relocate: /* 把U-BOOT重新定位到RAM*/          //r0=0; adr r0, _start /* r0是代码的当前位置*/ ld ...

  2. GIF助手帮助说明

    生成的文件位置? 生成的GIF等文件存储在 /sdcard/gifdir/ 目录下. 为什么分享到微信.Twitter等平台失败? 微信.Twitter等平台对GIF文件大小有限制,微信限制为1MB, ...

  3. Java探索之旅(16)——异常处理

    1.异常与异常处理 在<java编程思想>中这样定义 异常:阻止当前方法或作用域继续执行的问题.虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来 ...

  4. Dockerfile设置apt-get install tzdata的noninteractive方法

    在Ubuntu系统中,执行命令apt-get install -y tzdata以安装tzdata软件包.但是,最近发现,在Ubuntu 18.04 (Bionic Beaver)上无法自动安装该软件 ...

  5. SDUT2140图结构练习——判断给定图是否存在合法拓扑序列

    拓扑序列的判断方法为不存在有向环,代码实现的话有两种,一种是直接去判断是否存在环,较为难理解一些,另一种的话去判断结点入度,如果存在的入度为0的点大于一个,则该有向图肯定不存在一个确定的拓扑序列 #i ...

  6. surging+EFCore 服务实现入门

    准备工作 本篇文章基于上篇基础上进行的,请先了解此篇  surging+CentOS7+docker+rancher2.0 菜鸟部署运行笔记 开发环境  Visual Studio 2017 15.5 ...

  7. Protocol Buffers官方文档(proto3语言指南)

    本文是对官方文档的翻译,大部分内容都是引用其他一些作者的优质翻译使文章内容更加通俗易懂(自己是直译,读起来有点绕口难理解,本人英文水平有限),参考的文章链接在文章末尾 这篇指南描述如何使用protoc ...

  8. 笔记:eclipse的findbugs插件安装成功却不显示

    关键字:findbugs eclipse的findbugs插件安装成功却不显示的原因有: 1.插件版本太高,低版本的eclipse不兼容 2.也有可能是JDK版本低 findbugs安装方法: 1.在 ...

  9. 飘逸的python - 装饰器的本质

    很多人把装饰器搞的很复杂,其实本质很简单. 首先,什么是装饰器呢?在代码中发现戴着@xxx帽子的,就是装饰器. 那要怎么自己定义一个装饰器呢? 其实任何一个接收一个参数的callable都可以用来做装 ...

  10. linux线程私有数据---TSD池

    进程内的所有线程共享进程的数据空间,所以全局变量为所有线程共有.在某些场景下,线程需要保存自己的私有数据,这时可以创建线程私有数据(Thread-specific Data)TSD来解决.在线程内部, ...