java课内容2019.3.1
java的相关了解博客:答疑
https://www.cnblogs.com/aishangJava/p/6862917.html
一.构造方法:
1.构造方法只能被编译器调用一次,并且是在创建对象时
2.任何一个类都有,如果未定义,系统会自动默认一个无参的构造方法
3.构造方法的方法名应与类名一致,无返回类型,允许重载
4.创建一个子类对象,会自动先调用父类对象的构造方法,再是子类自身的构造方法。(这并不是创建了两个对象,其实只有一个子类对象;之所以需要调用父类的构造方法是因为在父类中,可能是因为在父类中,可能存在私有属性需要在其构造方法内初始化;)
对于Java开发人员来说,这是一个很常见的编译错误:
"Implicit super constructor is undefined for default constructor. Must define an explicit constructor"
例如下面的代码例子:
class Super{
String s;
public Super(String s){
this.s=s;
}
}
public class Sub extends Super{
int x=200;
public Sub()
{
System.out.println("Sub");
}
public static void main(String[] args){
Sub s=new Sub();
}
}
之所以出现这个编译错误,是因为父类的默认构造方法未定义。在Java中,如果一个类没有定义构造方法,编译器会默认插入一个无参数的构造方法;但是如果一个构造方法在父类中已定义,在这种情况,编译器是不会自动插入一个默认的无参构造方法,这正是以上demo的情况;
对于子类来说,不管是无参构造方法还是有参构造方法,都会默认调用父类的无参构造方法;当编译器尝试在子类中往这两个构造方法插入super()方法时,因为父类没有一个默认的无参构造方法,所以编译器报错;
要修复这个错误,很简单:
1、在父类手动定义一个无参构造方法:
public Super(){
System.out.println("Super");
}
2、移除父类中自定义的构造方法
3、在子类中自己写上父类构造方法的调用;如super(value);
我说一下我的理解:
首先看main函数,创建了一个Sub型的变量s,但是构造方法是这种的类型Sub(),然后看Sub类中,确实存在Sub()类型的构造函数(注明:即使不存在,系统应该也会有自定义一个无参构造方法),子类的构造方法没错,错在父类那里,
之前说了子类一定会引用到父类的构造方法,看父类,也定义了构造方法Super(String s),这就是问题,由于父类自身定义了构造方法,所以系统可能不会去再定义一个无参构造方法,但是这与子类的构造方法不一致(子类是无参,
其所需要的父类构造方法也应是无参的),就是父类与子类构造方法不一致。
在子类构造方法中,不管是程序员手动调用父类构造方法还是编译器自动调用,
子类构造方法必须要调用父类的某个构造方法;
被子类调用的父类构造方法在父类中必须是存在的;
二.java低层建筑的变化不会影响上层建筑的运行
三.接口
1.作用接受所有实现类的实例,可去访问具体对象方法
2.可以继承,且允许多重j继承(因为接口里面什么都没有,多重继承也不会产生混乱的关系而导致错误)
3.比抽象类更抽象,不能有变量,只有常量(描述不变信息),不能有已实现方法。
4.接口来实现类的引用
四.异常
子类抛出异常比父类更细致(更小的一个点),且父类异常写在子类异常后面(即先写子类异常,后写父类异常),否则还没到子类异常,在父类异常那里直接被捕捉。
五.Circle p = new Circle();
其中p不是对象,是变量,是一个引用,与对象首地址有关
六.继承
方法重载:方法名相同,但参数列表不一致。
只要求参数的个数或参数的类型不一致就说两个函数是重载函数,而至于返回值是否一样,没关系。同时,重载可以发生在同一个类中也可以发生在继承关系中。
方法重写:方法名,返回类型,参数列表一致
七.抽象类
1.可包含抽象方法的类,但没有抽象方法的类也可为抽象类(这种一般定义为抽象类的原因是单纯不让它实例化,不能形成对象,也就是不能被new.
2.抽象类若需实例化,可交给它的非抽象子类
3.抽象类可看作是一个残类,功能不全。
4.抽象方法只有功能(方法)定义,没有功能(方法)实现,即抽象方法 abstract void f(); 抽象方法不能包含有任何方法的BODY 。
5.抽象类中可以有非抽象方法(非抽象方法是可以存在功能实现)。
八.向上转型,向下转型
向上转型:通俗地讲即是将子类对象转为父类对象。此处父类对象可以是接口
向下转型:即是把父类对象转为子类对象。父类引用复制给子类对象引用,但不一定成功,原因是编译器
具体理解可看:在java 中,什么叫向上转型
https://zhidao.baidu.com/question/176791556213151844.html
java课内容2019.3.1的更多相关文章
- java面试宝典2019(好东西先留着)
java面试宝典2019 1.meta标签的作用是什么 2.ReenTrantLock可重入锁(和synchronized的区别)总结 3.Spring中的自动装配有哪些限制? 4.什么是可变参数? ...
- JAVA课设个人博客--多源数据教学管理系统
JAVA课设个人博客--多源数据教学管理系统 1.团队课程设计博客链接 https://www.cnblogs.com/hq9-/p/10278470.html 2. 个人负责模块或任务说明 主要模块 ...
- 20155301第十一周java课栈程序
20155301第十一周java课栈程序 内容一:后序表达式: abcde/-f+ 内容二:根据填充以下代码: import java.util.Scanner; public class MyDCT ...
- java课极限测试
在临近国庆的9月30号补课日 碰到了惨绝人寰的java课极限测试 我从下午两点半做到晚上九点 不得不说人在烦躁的时候是真的没办法写代码的 根本不想思考也不想学习.最后的几个小时基本就是在叹息和坐着.也 ...
- 关于转入软件工程专业后第二次java课上作业的某些体会
今天是第二周的java课. 自从转入了软件工程专业后,在我没有学习c++的基础上,直接开始了学习java的过程.不得不说过程很艰辛.今天下午老师让编写一个随机产生作业的软件.而我的基础差到都不知道如何 ...
- Java开源内容管理CMS系统J4CMS的几个样式
www.j4cms.com java 开源内容管理 页面直接编辑 bootstrap3 样式 default 样式 metro 样式 oschina 样式 leblog 样式 foundation 样 ...
- JAVA课设---五子棋
1.团队博客链接 JAVA课设-五子棋-团队博客 2.个人负责模块: ①对鼠标事件的处理 , 此模块需处理五子棋的放置问题.颜色转换问题.以及当五子连线时弹出窗口显示结果. ②对MainFrame中主 ...
- java课设数据库打包报错
最近在交java课设时把东西打包给老师遇到许多奇葩问题, 首先是数据库复制时提示: 这是数据库与SQL server服务没有分离(我用的是SQLserver暂时,对于其他的,我以后会继续尝试)可以进行 ...
- 【转】JAVA输出内容打印到TXT以及不同系统中如何换行
JAVA输出内容打印到TXT以及不同系统中如何换行 http://xiyang.09.blog.163.com/blog/static/59827615201172552755293/ 2011-08 ...
随机推荐
- ROS探索总结(二)——ROS总体框架
个人分类: ROS 所属专栏: ROS探索总结 一. 总体结构 根据ROS系统代码的维护者和分布来标示,主要有两大部分: (1)main:核心部分,主要由Willow G ...
- JS的Prototype属性
转载至: http://blog.sina.com.cn/s/blog_7045cb9e0100rtoh.html 函数:原型 每一个构造函数都有一个属性叫做原型(prototype,下面都不再翻译, ...
- C++面向对象类的实例题目四
题目描述: 以面向对象的概念设计一个类,此类包含3个私有数据:unlead.lead(无铅汽油和有铅汽油)以及total(当天总收入,无铅汽油的价格是17元/升,有铅汽油的加个是16元/升),请以构造 ...
- wpf仿qq边缘自动停靠,支持多屏
wpf完全模仿qq边缘自动隐藏功能,采用鼠标钩子获取鼠标当前状态,在通过当前鼠标的位置和点击状态来计算是否需要隐藏. 以下是实现的具体方法: 一.鼠标钩子实时获取当前鼠标的位置和点击状态 /// &l ...
- Linux bc命令
一.简介 GNU bc是一款基于命令行的计算器程序,支持高精度数字和多种数值类型(例如二进制.十进制.十六进制)的输入输出. 二.实例 http://www.linuxidc.com/Linux/20 ...
- p4213 【模板】杜教筛(Sum)
传送门 分析 我们知道 $\varphi * 1 = id$ $\mu * 1 = e$ 杜教筛即可 代码 #include<iostream> #include<cstdio> ...
- rpush()
批量插入多个value,并为消息队列模式 $pipe->rpush($key,$vlaues);//$values是多个value组成的一个数组
- MySQL介绍与安装
mysql介绍 #mysql就是一个基于socket编写的C/S架构的软件 #客户端软件 mysql自带:如mysql命令,mysqldump命令等 python模块:如pymysql 数据库管理软件 ...
- win7搭建TensorFlow环境
官网安装指南地址:https://www.tensorflow.org/install/pip 安装过程碰到的问题: 1.创建虚拟环境 virtualenv --system-site-package ...
- SQL SERVER 提供了一些时间函数:
SQL SERVER 提供了一些时间函数:取当前时间:select getdate()取前一个月的时间:SELECT DATEADD(MONTH,-1,GETDATE()) 月份减一个月取年份:SEL ...