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.抽象类中可以有非抽象方法(非抽象方法是可以存在功能实现)。

private int i; // Storage allocated for each
public String what() { return "Instrument"; }
public abstract void adjust();
6.在abstract class方式中,Demo可以有自己的数据成员,也可以有非abstract的成员方法,
而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。

八.向上转型,向下转型

向上转型:通俗地讲即是将子类对象转为父类对象。此处父类对象可以是接口

向下转型:即是把父类对象转为子类对象。父类引用复制给子类对象引用,但不一定成功,原因是编译器

具体理解可看:在java 中,什么叫向上转型

https://zhidao.baidu.com/question/176791556213151844.html

java课内容2019.3.1的更多相关文章

  1. java面试宝典2019(好东西先留着)

    java面试宝典2019 1.meta标签的作用是什么 2.ReenTrantLock可重入锁(和synchronized的区别)总结 3.Spring中的自动装配有哪些限制? 4.什么是可变参数? ...

  2. JAVA课设个人博客--多源数据教学管理系统

    JAVA课设个人博客--多源数据教学管理系统 1.团队课程设计博客链接 https://www.cnblogs.com/hq9-/p/10278470.html 2. 个人负责模块或任务说明 主要模块 ...

  3. 20155301第十一周java课栈程序

    20155301第十一周java课栈程序 内容一:后序表达式: abcde/-f+ 内容二:根据填充以下代码: import java.util.Scanner; public class MyDCT ...

  4. java课极限测试

    在临近国庆的9月30号补课日 碰到了惨绝人寰的java课极限测试 我从下午两点半做到晚上九点 不得不说人在烦躁的时候是真的没办法写代码的 根本不想思考也不想学习.最后的几个小时基本就是在叹息和坐着.也 ...

  5. 关于转入软件工程专业后第二次java课上作业的某些体会

    今天是第二周的java课. 自从转入了软件工程专业后,在我没有学习c++的基础上,直接开始了学习java的过程.不得不说过程很艰辛.今天下午老师让编写一个随机产生作业的软件.而我的基础差到都不知道如何 ...

  6. Java开源内容管理CMS系统J4CMS的几个样式

    www.j4cms.com java 开源内容管理 页面直接编辑 bootstrap3 样式 default 样式 metro 样式 oschina 样式 leblog 样式 foundation 样 ...

  7. JAVA课设---五子棋

    1.团队博客链接 JAVA课设-五子棋-团队博客 2.个人负责模块: ①对鼠标事件的处理 , 此模块需处理五子棋的放置问题.颜色转换问题.以及当五子连线时弹出窗口显示结果. ②对MainFrame中主 ...

  8. java课设数据库打包报错

    最近在交java课设时把东西打包给老师遇到许多奇葩问题, 首先是数据库复制时提示: 这是数据库与SQL server服务没有分离(我用的是SQLserver暂时,对于其他的,我以后会继续尝试)可以进行 ...

  9. 【转】JAVA输出内容打印到TXT以及不同系统中如何换行

    JAVA输出内容打印到TXT以及不同系统中如何换行 http://xiyang.09.blog.163.com/blog/static/59827615201172552755293/ 2011-08 ...

随机推荐

  1. Blender 基础 骨架-02 骨架的各种呈现方式

    Blender 基础 骨架-02 - 骨架的各种呈现方式 我使用的Blender版本:Blender V 2.77 前言 在 Blender 基础 骨架-01 教程里面,将骨架和模型联系在一起,我们在 ...

  2. 使用RSS提升DPDK应用的性能(转)

    本文描述了RSS以及在DPDK中如何配置RSS达到性能提升和统一分发. 什么是RSS RSS(Receive Side Scaling)是一种能够在多处理器系统下使接收报文在多个CPU之间高效分发的网 ...

  3. 最短路径Dijkstar算法和Floyd算法详解(c语言版)

    博客转载自:https://blog.csdn.net/crescent__moon/article/details/16986765 先说说Dijkstra吧,这种算法只能求单源最短路径,那么什么是 ...

  4. Spring Bean的装配

    Bean 的装配,即Bean对象的创建.容器根据代码要求创建Bean对象后再传递给代码的过程,称为Bean的装配. 一.默认分的装配方式 默认的装配的方式调用Bean类的构造方法 二.动态工厂Bean ...

  5. Json数据导出生成Excel

    最近在做一个导入导出Excel的功能,导出其他类型的文件都比较熟悉,但是导入跟导出一个Excel还是稍微特殊点.根据这次的经验,写了个导出的小样例. 总体思路就是json数据的key,value跟Ex ...

  6. [转]JQ中$(window).load和$(document).ready区别与执行顺序

    一.$(window).load().window.onload=function(){}和$(document).ready()方法的区别 1.$(window).load() 和window.on ...

  7. pthread中如何追踪stack over flow

    通常在程序挂掉的时候我们会catch 他们挂掉的signal,然后在signal中打印出当时的一个stack,来方便问题调查, 但是在stack overflow的情况发生时,会没有拿到stack.s ...

  8. vs code 提示快捷键

    1.ctrl+space 基本上被输入法快捷键占用 文件->首选项->键盘快捷方式(ctrl+k,ctrl+s):搜索 editor.action.triggerSuggest 换成 ct ...

  9. window 启用 windows 自动登录

    启用 windows 自动登录 方案一: 1.运行命令:control userpasswords2 2.取掉复选框的钩: 方案二:(方案一无效的时候使用) 微软官网地址:https://suppor ...

  10. Binder学习笔记(十一)—— 智能指针

    轻量级指针 Binder的学习历程爬到驱动的半山腰明显感觉越来越陡峭,停下业务层的学习,补补基础层知识吧,这首当其冲的就是智能指针了,智能指针的影子在Android源码中随处可见.打开framewor ...