Java继承改进
一.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继承改进的更多相关文章
- 学习博客之Java继承多态接口
这一篇博客主要是对软工前一阶段学习的总结,主要是对Java的学习总结,包括三部分:Java的继承.多态和接口 Java的继承 继承是面向对象的三大特性之一,能够实现软件的复用. Java子类继承父类的 ...
- Java继承与组合
Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...
- JAVA继承时构造函数的问题
今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan ...
- Java继承和接口
接口最关键的作用,也是使用接口最重要的一个原因:能上溯造型至多个基础类.使用接口的第二个原因与使用抽象基础类的原因是一样的:防止客户程序员制作这个类的一个对象,以及规定它仅仅是一个接口.这样便带来了一 ...
- Java继承的初始化
/** * Created by xfyou on 2016/11/2. * Java继承的初始化 */ public class Beetle extends Insect { int k = pr ...
- Java—继承、封装、抽象、多态
类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...
- java继承关系中成员变量,构造方法,成员方法的关系
Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单写那个名字就访问那个名字! b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢? 子 ...
- JAVA继承时this和super关键字
JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父 ...
- JAVA 继承中的this和super
学习java时看了不少尚学堂马士兵的视频,还是挺喜欢马士兵的讲课步骤的,二话不说,先做实例,看到的结果才是最实际的,理论神马的全是浮云.只有在实际操作过程中体会理论,在实际操作过程中升华理论才是最关键 ...
随机推荐
- 字符编码ASCII、Unicode、GB
计算机的存储都是二进制的,那么我们平时看到的各种字符都需要通过按照一定的格式转换成为二进制才能在被计算机识别与处理.这个过程便成为编码.常见的编码方式有ASCII.Unicode.GB2312等. 1 ...
- Entity Framework Code-First(12):Configure One-to-Many
Configure One-to-Many Relationship: Here, we will learn how to configure One-to-Many relationship be ...
- Struts2学习第七课 通配符映射
一个WEB应用可能有长百上千个action声明,可以利用struts提供的通配符映射机制吧多个彼此相识的映射关系简化为一个映射关系. 通配符映射规则: --若找到多个匹配,没有通配符的那个将胜出(精确 ...
- UCD9222 EN1/EN2
如果要使用UCD9222 EN1/EN2来控制每路电源的输出,那么需要注意实际是由PMBUS_CNTRL和EN1/EN2的与来控制每路的输出.
- 经典DP 嵌套矩形 (南洋理工ACM—16)
本来是个很水的DP,结果被自己的代码习惯给打败了 代码: #include<iostream> #include<stdlib.h> #include<string.h& ...
- Software - 创建程序打包项目
通常的步骤 准备一个 Visual Studio Installer 的项目模板 利用该模板,在解决方案中新建一个 Visual Studio Installer 项目 设置项目属性,配置文件系统 生 ...
- C#和Python 图片和base64的互转
C#实例代码: /// <summary> /// 图片转base64 /// </summary> /// <param name="bmp"> ...
- Note: OBLIVIATE: A Data Oblivious File System for Intel SGX
OBLIVIATE redesigned ORAM for SGX filesystem operations for confuse access patterns to protect user ...
- Docker:容器与主机时间不同步问题解决
在Docker容器运行后,可能会发现容器时间与宿主机时间不一致,一般会差8个小时.这样会造成在容器中运行的web程序打出的日志时间与实际时间不一致,如果web程序中有定时任务也会造成影响等,需要对宿主 ...
- (PHP)redis Zset(有序集合 sorted set)操作
/** * * Zset操作 * sorted set操作 * 有序集合 * sorted set 它在set的基础上增加了一个顺序属性,这一属性在修改添加元素的时候可以指定,每次指定后,zset会自 ...