一、继承

1.格式:class 子类 extends 父类

2.好处:提高代码的复用性;让类与类之间产生了关系,是多态的前提。

3.弊端:

(1)类的耦合性增强了,而开发的原则是高内聚,低耦合。内聚是指类独立完成某件事的能力,耦合指类和类产生关系。

(2)打破了封装性(子类继承了父类所有非私有成员)

4.特点

(1)Java只支持单继承,不支持多继承,即类只能有一个直接的父类。

(2)Java支持多层继承(继承体系)

5.注意事项

(1)子类只能继承父类所有非私有的成员

(2)子类不能继承父类的构造方法,但子类的构造方法中通过super()去访问了父类的构造方法

(3)不要为了部分的功能去使用继承,继承体现的是" is a "的关系,使用继承的类必须是所属关系。

6.super关键字

(1)含义:代表父类存储空间的标识,可以理解为对父类的引用,可以操作父类的成员,用法和this类似。

(2)super()用法:调用父类的无参数的构造方法

A:子类所有构造方法的第一行,都隐含一条语句super(); ,所以子类初始化之前会进行父类的初始化

B:如果父类没有无参数构造方法,子类的构造方法会报错

   解决办法:a:在父类中加一个无参数构造方法(推荐在开发时尽量这么做)

        b:在子类构造方法的第一行中显式的使用super去调用父类的带参构造方法

        c:子类通过this去调用本类的其他构造方法

        子类中一定要有一个去访问了父类的构造方法,否则父类数据没有初始化

C:在构造器中,注意this(形参列表)和super(形参列表)一定要定义第一行,因为是调用用于初始化的构织函数。

D:在构造器内部,this(形参列表)和super(形参列表)只能出现一个,因为只有一个“第一行”!

(3)子父类的初始化(分层初始化):先进行父类的初始化,再进行子类的初始化

A:注意:子类构造方法中的super()仅仅代表要先初始化父类的数据,在初始化子类的数据,而不是按照上下文顺序依次执行到super()。

B:面试题:看程序写结果

class X{
Y b = new Y();
X(){
System.out.println("X");
}
} class Y{
Y(){
System.out.println("Y");
}
} class Z extends X{
Y y = new Y();
Z(){
     super();
System.out.println("Z");
} public void static main(String[] args){
new Z();
}
}

结果是:YXYZ,而不是YYXZ,原因参考A。

 7.成员方法的重写

(1)概述:子类中出现了和父类一样的方法声明,也被称为方法覆盖,方法覆写。

(2)好处:当子类需要父类的功能,而子类有自己特有的内容时,可以重写父类的方法。

(3)注意事项

A:父类中的私有成员方法不能被重写,因为父类私有方法不能被继承

B:子类重写父类方法时,访问权限不能更低,即修饰符不能小于父类,最好一致

C:父类静态方法,子类也必须通过静态方法进行重写。(其实算不上方法重写,见多态)

D:若父类方法抛异常,那么子类方法的异常类型不能大于父类的

(4)方法重载和方法重写的区别

Overload重载:同一个类中,出现的方法名相同,参数列表不同的现象。注意,方法重载能改变返回值的类型,因为它和返回值类型无关。

Override重写:子类中,出现和父类中一摸一样的方法声明的现象。

8.final关键字

(1)概述:是一个修饰符,可以修饰类、方法、变量

(2)特点:

A:被final修饰的类是一个最终类,不能被继承

B:被final修饰的方法是一个最终方法,不能被覆盖,就阻止了父类中的方法被子类重写

C:被final修饰的变量是一个常量,只能赋值一次

(3)注意事项

final修饰局部变量,若该变量是基本类型,其值不能改变;若是引用数据类型,是其地址值不能改变。

面试题:final修饰局部变量的问题

class Student{
int age = 10;
} class FinalTest{
public static void main(String[] args){
//局部变量是基本数据类型
int x = 10;
x = 100;
System.out.println(x);
final int y = 10;
y = 100;//报错,无法为final变量赋值
System.out.println(y); //局部变量是引用数据类型
Student s = new Student();
System.out.println(s.age);
S.age = 100;
System.out.println(s.age); final Student ss = new Student();
System.out.println(ss.age);
ss.age = 100;//不报错,age可以被赋值
System.out.println(ss.age); //重新给ss分配内存空间
ss = new Student();//报错,final修饰的引用数据类型的变量不能修改其指向的内存空间
}
}

Java语法基础DayFive的更多相关文章

  1. Java语法基础(1)

    Java语法基础(1) 1.      Java是一门跨平台(也就是跨操作系统)语言,其跨平台的本质是借助java虚拟机 (也就是JVM(java virtual mechinal))进行跨平台使用. ...

  2. java语法基础(一)

    这个是自己前两年做java视频教程时候的课件.感兴趣的同学可以参考下. 这里是纯粹的语法行总结. editplus的使用 选择项目目录 打开editplus 左侧目录导航栏 可以打开盘符,文件夹 可以 ...

  3. JAVA语法基础作业——动手动脑以及课后实验性问题 (八)

    一.动手动脑 运行AboutException.java示例,了解Java中实现异常处理的基础知识. 1)源代码 import javax.swing.*; class AboutException ...

  4. java语法基础

    Java的基本符号(token) Java的单词符号有五种:关键字.标识符.常量.分隔符和操作符. Java的字符集 Java 采用一种称为unicode的字符集,该字符集合是一种新的编码标准,与常见 ...

  5. Java语法基础(三)----选择结构的if语句、switch语句

    [前言] 流程控制语句: 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.也就是说程序的流程对运行结果有直接的影响.所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要通过 ...

  6. Java语法基础(一)----关键字、标识符、常量、变量

    一.关键字: 关键字:被Java语言赋予特定含义的单词.组成关键字的字母全部小写.注:goto和const作为保留字存在,目前并不使用.main并不是关键字. 二.标识符: 标识符:就是给类,接口,方 ...

  7. 黑马程序员——【Java基础】——Java语法基础

    ---------- android培训.java培训.期待与您交流! ---------- 一.关键字 1.定义和特点 定义:被Java语言赋予了特殊含义的单词. 特点:关键字中所有的字母都为小写. ...

  8. JAVA语法基础(课堂ppt问题总结)

    一:运行源代码EnumTest.java,分析运行结果. 代码如下: public class EnumTest { public static void main(String[] args) { ...

  9. java语法基础(总结)

    1,关键字:其实就是某种语言赋予了特殊含义的单词. 保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词. 2,标示符:其实就是在程序中自定义的名词.比如类名,变量名,函数名.包含 0-9. ...

随机推荐

  1. dedecms自定义表单时间时间戳值类型的转换方法

    找网站找的别人的方法,记录一下 修改/dede/templets/diy_list.htm,在第42行else前面加上以下代码: else if($fielddata[1]=='datetime') ...

  2. python记录_day27 tcp/ip五层模型

    ## 网络协议按照不同的功能分为多层,目前存在的模型有osi七层模型.tcp/ip五层和tcp/ip四层模型 我们主要用的是tcp/ip五层模型 那么每层的作用是什么呢,现在就从设计者的角度自下到上逐 ...

  3. MVC实战之排球计分(一)—— 需求分析与数据库设计

    此系列博客目的是制作一款排球计分程序.这系列博客讲讲述此软件的 各个功能的设计与实现. 一.需求分析: 这个程序是排球计分程序,其业务非常简单,具体如下: 1.本程序可以选择用户身份,通过不同角度记录 ...

  4. 5月16 JSON的一些知识点及AJAX的应用

    什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换语言,以文字为基础,(文本数据交换格式).JSON简单说就是javascript中的对象和数组, ...

  5. js字符串转日期兼容性

    今天遇到个bug,安卓上是好的,ios就不行.然后我就把可能用到的值都打印出来,发现日期比较一项在苹果机上就显示false,而谷歌浏览器是true.突然回忆起以前开发遇到过类似的问题,都是出在字符串转 ...

  6. application使用@符合问题:'@' that cannot start any token. (Do not use @ for indentation)

    在application配置文件中使用@出现异常: Exception in thread "main" while scanning for the next token fou ...

  7. Python装饰器--decorator

    装饰器 装饰器实质是一个函数,其作用就是在不改动其它函数代码的情况下,增加一些功能.如果我们需要打印函数调用前后日志,可以这么做 def log(func): print('%s is running ...

  8. 一、I/O操作(File文件对象)

    一.File类 Java里,文件和文件夹都是用File代表 1.使用绝对路径或者相对路径创建File对象 使用绝对路径或者相对路径创建File对象 package File; import java. ...

  9. Flexbox 布局的最简单表单 (转)

    作者: 阮一峰 弹性布局(Flexbox)逐渐流行,越来越多人使用,因为它写 CSS 布局真是太方便了. 三年前,我写过 Flexbox 的介绍(上,下),但是有些地方写得不清楚.今天,我看到一篇教程 ...

  10. List<Map<String, Object>>取值

    List<Map<String, Object>> postlist //一个list里面装着多个map,如下 [ {A=0100, B=4}, {A=0200, B=3}, ...