首页 > 编程语言 >对于Java课上问题的探究和解答

对于Java课上问题的探究和解答

时间:2022-10-09 00:46:32浏览次数:53  
标签:调用 Java 子类 探究 接口 课上 抽象类 父类 方法

问题一:子类和父类的继承关系(extends)

需要强调的是,子类自动声明继承父类中的public和protected的成员

其中,public成员,外界可以自由访问;
private成员,外界无法进行访问;
protected成员,在同一个包中的子类,或者继承于同一个父类的子类之间可以访问;
对于较为特殊的default成员,如果不指明默认权限,则默认同一个包中的类可以进行访问;

如图所示,存在三个类,分别为爷爷类、父类和子类,分别都有一个相应的方法,输出结果如下:

可以得出以下结论:
1、在调用子类的方法时,会先调用其父类的成员方法;
2、在调用子类方法时,在调用父类方法时,会优先来到无参父类的方法里面,调用无参父类的方法;

还需要强调的一点是,在子类里面调用父类方法时,一般会使用super();来替代,但是,只能放在子类实现语句的前面,否则就会报错!


问题二:为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?

其实,我们知道构造函数的主要作用是在类的对象创建时定义初始化的状态,在子类中调用父类来的成员方法时,如果不先进行初始化,那么对于从父类来的对象无法得到正确的初始化,故而反过来运行会导致程序报错!记得一定要先进行初始化奥!

问题三:不允许继承的类-final

final嘛,本身就是最后的意思,就是只允许读,不允许写的;
以final声明的方法不允许覆盖、不允许更改;

也可以将它称作“不可变的类”,属性不可改,并且也不会衍生出新的子类

举例:

这样的变量是不允许更改的

问题四:探索一下--调用仅仅初始化的类,会输出什么

原来它在没有定义任何成员的情况下,调用并输出该类的话,输出的是该类所在的地址

探索一下--查看println语句调用了些啥

利用反汇编,找打了JDK源码,发现这个:
println语句调用了String类里面的valueOf()方法,然后valueOf()方法又调用了Object.toString()方法,从而输出的是地址

问题六:子类和父类的方法名的解释

1、子类与父类方法名完全不同时,为“扩充”;
2、子类与父类方法名完全相同时,为“覆盖\重写”;
3、子类与父类的方法名称相同,但是参数类型或者个数不同时,为“重载”;

目前来说,并不建议将子类方法名和父类方法名设置为“覆盖”,会引起一些不必要的麻烦

Object是类的顶级基层,所有的类都是来自于Object的继承

问题七:“+”号的神奇

举例:

由此可知,+可以用于连接字符串

问题八:方法覆盖


由此可知,当父类和子类的方法是覆盖时,用的是子类的方法

举例:当子类和父类运用了同样一个方法时,

问题九:父类变量可以直接引用子类对象

并且,还是之前提到的Object变量,因为他是顶层基类,所以每个对象都可以赋值给Object变量

问题十:子类对象与基类对象之间的赋值

1、子类变量可以直接赋值给基类变量;
2、基类变量如果想要赋值给子类变量的话,需要进行强制类型转换

子类对象变量=(子类名)基类对象名

问题十一:使用instanceof运算符判断是否可以实现转换

问题十二:根据知识存储判断

我个人对于这些语句的判断结果是这样的:
我认为第二句和第四句会出错

结果是这样的:
第二句报错

第四句报错

其他正常:

问题十三:对“变态”类的理解

结果:100、200、200、200、201

1、初始化父类:调用的是父类的方法--100
2、初始化子类:调用的是子类的方法--200
3、父类对象直接调用子类:调用的是子类的方法--200
4、目前已经令父类对象调用子类,++是后置--200
5、将父类强制转换为子类,再++--201

调用子类,会优先访问子类中与父类同名的方法,如果想要访问父类,需要在前面加上super()方法

问题十四:对“滞后绑定”的探索

每个类里面都有相应的public属性的value值,类与类之间存在继承关系,每次调用时,会调用到该子类的方法,但调用不到该子类的value值,即为“滞后探索”;

问题十五:多态生成的原因以及好处

为了减少代码的修改,使得繁琐的代码更加简洁,使修改代码变得更加方便

频繁修改代码:

修改较为麻烦,不符合实际情况

举例:动物园

多态编程分为继承多态接口多态

问题十六:抽象和接口

加上adstract之后,就变成了抽象方法,只有在它的继承子类中定义了其未实现的方法之后,在能使用new创建新的对象;

在抽象方法里面,只有方法名,没有方法体

一个抽象类中可以包含非抽象方法和成员变量。包含抽象方法的类一定是抽象类,但抽象类中的方法不一定是抽象方法

抽象类包括三种:
1、直接定义了一个抽象方法
2、继承了一个抽象父类,但没有完全实现父类中的抽象方法
3、实现了一个接口,但没有完全实现该接口所包含的抽象方法

抽象类不能创建对象,一般用它来引用子类对象

模板::抽象类 抽象类变量 = new 派生自抽象类的具体子类();

利用接口抽象对象的行为特性

接口的使用::接口类型 接口类型的变量=new 实现了接口的具体类型()

接口的扩充:使用继承(extends)实现接口的扩充

实现子接口的类,必须实现“父”“子”接口所定义的所有方法,才能被实例化(new出一个新的对象)

接口和抽象类的区别

标签:调用,Java,子类,探究,接口,课上,抽象类,父类,方法
From: https://www.cnblogs.com/liuzijin/p/16760231.html

相关文章

  • Java 数据类型 扩展
    publicclassDemo2{publicstaticvoidmain(String[]args){//整数拓展进制:二进制ob,十进制,8进制0,16进制0xinti=10;inti......
  • Java基本语法 SwitchCase
    SwitchCaseswitchcase语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。语法switchcase语句语法格式如下:switch(expression){casevalue:......
  • 深入JAVA虚拟机第二版 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1XrtkbYr0Rop2hrqY4SRSUA点击这里获取提取码 ......
  • java韩顺平
    代码块 代码块相当于是对构造器的补充;每创建一个新对象代码块就被调用一次;static代码块只在加载该类时调用一次;new一个新类时,先调用          ......
  • 157. 用 Read4 读取 N 个字符(仅java ac代码
     1/**2*Theread4APIisdefinedintheparentclassReader4.3*intread4(char[]buf4);4*/56publicclassSolutionextendsReader4{......
  • Mybatis传递参数的各种方式:简单类型,@Param,map,java对象等等
    本文演示了给mybatis的mapper文件当中的SQL语句传递参数或者参数值的各种方式.xml格式mapper文件:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapper......
  • java---三个小案例--冒泡---动态扩容--将输入的字母中带x的置为null,不是x的依次向前
    三个案例1.动态录入往数组里录入n个数字,并用冒泡排序2.动态输入n个字母,并将输入的字母中带x的置为null,不是x的依次向前3.动态录入学生成绩并保存到数组中,每录入一个成绩......
  • IDEA创建java项目
    一.创建:1.new-->project2.设置包名:src->New->Package在这里我的包名设置为kecheng3.在包名下创建javaclass右键包名kecheng->New->javaclass然后输入class的名字,......
  • java异常机制
    异常异常的概述异常就是程序出现了不正常的情况 异常(Exception)的概念异常指程序运行过程中出现的非正常现象,例如除数为零、需要处理的文件不存在、数组下标越界......
  • 简述Java编译及运行过程
    .java源文件由编译器编译成.class字节码文件,字节码文件由JVM解释运行。 编译:是指将我们编写的Java源文件翻译成JVM认识的class文件,在这个过程中,javac编译器会检查我......