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. ZROI2018提高day4t1

    传送门 分析 一道贪心题,我们用两个优先队列分别维护卖出的物品的价格和买入但没有卖出的物品的价格,然后逐一考虑每一个物品.对于每一个物品如果他比卖出的物品中的最低个价格,则改将现在考虑的物品卖出,将之 ...

  2. 718C Sasha and Array

    传送门 题目 Sasha has an array of integers a1, a2, ..., an. You have to perform m queries. There might be ...

  3. backstop bsg6

  4. TCP/IP的三次握手和四次放手

    一开始个人对于三次握手和四次挥手这个东西还是有时候会忘记,可能理解的不是非常深刻,所以今天就自己动手来记录一下这个知识点,方便以后查看.总结完之后发现总结的还是可以的哈哈. 三次握手建立连接 第一次: ...

  5. 查看Linux各发行版本方法

    SUSE: cat /etc/SuSE-release   Slackware: cat /etc/slackware-version   Redhat: cat /etc/redhat-releas ...

  6. java打成jar包后,class,getResource()出现null指针异常

    1.SqlHelper.java有包路径没?如果有,是不是类似于com.db.jdbc? 不管怎么办,你SqlHelper.class.getResourceAsStream("/mysql ...

  7. sql 试图索引

    视图是对数据(一种元数据类型)的一种描述.当创建了一个典型视图时,通过封装一个 SELECT 语句(定义一个结果集来表示为虚拟表)来定义元数据.当在另一个查询的 FROM 子句中引用视图时,将从系统目 ...

  8. Oracle中date转为timstam可以函数to_timestamp的方式来转化

    data 转为timstam可以函数to_timestamp的方式来转化 Select to_timestamp('2018-02-27 09:48:28','yyyy-mm-dd hh24:mi:s ...

  9. Kotlin 数据类型(字符类型)

    Kotlin有两种常见的字符类型. 第一种是String,第二种char. String String 的类型的赋值必须是用双引号的. 格式: var name="Arm830" ...

  10. NSString 字符串

    0.字符串常用操作 自动补充方法:当字符串长度不够需要自动补充到一定的位数 OC字符串与C语言字符串之间的相互转换 1.不可变字符串的创建 // 直接创建不可变字符串 /* 在 OC 中,使用 @&q ...