`
chrp99
  • 浏览: 7787 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Java__内部类,抽象类,继承,接口,异常的处理...等

 
阅读更多

抽象类的特点:

1,抽象方法一定在抽象类中。

2,抽象方法和抽象类都必须被abstract关键字修饰。

3,抽象类不可以用new创建对象。因为调用抽象方法没意义。

4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。

如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

抽象类和一般类没有太大的不同。

抽象类比一般类多个了抽象函数。就是在类中可以定义抽象方法。

抽象类不可以实例化。

特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。

abstract 关键字,和哪些关键字不能共存。

final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。

private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。

而抽象方法出现的就是需要被复写。

static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。

可是抽象方法运行没意义。

抽象类中有构造函数,因为抽象类是一个父类,要给子类提供实例的初始化。

继承:

1,提高了代码的复用性。

2,让类与类之间产生了关系。有了这个关系,才有了多态的特性。

注:不要为了获取其他类的功能,简化代码而继承。

必须是类与类之间有所属关系才可以继承。所属关系 is a。

Java语言中:java只支持单继承,不支持多继承。

因为多继承容易带来安全隐患:当多个父类中定义了相同功能,

当功能内容不同时,子类对象不确定要运行哪一个。

但是java保留这种机制。并用另一种体现形式来完成表示。多实现。

java支持多层继承。也就是一个继承体系

子父类中的函数。

当子类出现和父类一模一样的函数时,

当子类对象调用该函数,会运行子类函数的内容。

如同父类的函数被覆盖一样。

这种情况是函数的另一个特性:重写(覆盖)

当子类继承父类,沿袭了父类的功能,到子类中,

但是子类虽具备该功能,但是功能的内容却和父类不一致,

这时,没有必要定义新功能,而是使用覆盖特殊,保留父类的功能定义,并重写功能内容。

覆盖:

1,子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。

2,静态只能覆盖静态。

重载:只看同名函数的参数列表。

重写:子父类方法要一模一样。

3,子父类中的构造函数。

在对子类对象进行初始化时,父类的构造函数也会运行,

那是因为子类的构造函数默认第一行有一条隐式的语句 super();

super():会访问父类中空参数的构造函数。而且子类中所有的构造函数默认第一行都是super();

子类一定要访问父类中的构造函数。因为父类中的数据子类可以直接获取。所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的。所以子类在对象初始化时,要先访问一下父类中的构造函数。

如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。

注:super语句一定定义在子类构造函数的第一行。

当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定要访问父类中的构造函数。

子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。

子类中至少会有一个构造函数会访问父类中的构造函数。

final : 最终。作为一个修饰符,

1,可以修饰类,函数,变量。

2,被final修饰的类不可以被继承。为了避免被继承,被子类复写功能。

3,被final修饰的方法不可以被复写。

4,被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,有可以修饰局部变量。

当在描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字。方便于阅读。而这个值不需要改变,所以加上final修饰。作为常量:常量的书写规范所有字母都大写,如果由多个单词组成。

5,内部类定义在类中的局部位置上是,只能访问该局部被final修饰的局部变量。

接口:初期理解,可以认为是一个特殊的抽象类

当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。

class用于定义类

interface 用于定义接口。

接口定义时,格式特点:

1,接口中常见定义:常量,抽象方法。

2,接口中的成员都有固定修饰符。

常量:public static final

方法:public abstract

记住:接口中的成员都是public的。

接口:是不可以创建对象的,因为有抽象方法。

需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。

否则子类是一个抽象类。

接口可以被类多实现,也是对多继承不支持的转换形式。java支持多实现。


内部类的访问规则:

1,内部类可以直接访问外部类中的成员,包括私有。

之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式 外部类名.this

2,外部类要访问内部类,必须建立内部类对象。

访问格式:

1,当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中。

可以直接建立内部类对象。

格式

外部类名.内部类名 变量名 = 外部类对象.内部类对象;

Outer.Innerin = new Outer().new Inner();

2,当内部类在成员位置上,就可以被成员修饰符所修饰。

比如,private:将内部类在外部类中进行封装。

static:内部类就具备static的特性。

当内部类被static修饰后,只能直接访问外部类中的static成员。出现了访问局限。

在外部其他类中,直接访问static内部类的非静态成员

newOuter.Inner().function();

在外部其他类中,直接访问static内部类的静态成员

uter.Inner.function();

注:当内部类中定义了静态成员,该内部类必须是static的。

当外部类中的静态方法访问内部类时,内部类也必须是static的。

class Body

{

privateclass XinZang

{

}

publicvoid show()

{

newXinZang().

}

}

内部类定义在局部时,

1,不可以被成员修饰符修饰

2,可以直接访问外部类中的成员,因为还持有外部类中的引用。

但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。

匿名内部类:

1,匿名内部类其实就是内部类的简写格式。

2,定义匿名内部类的前提:

内部类必须是继承一个类或者实现接口。

3,匿名内部类的格式: new 父类或者接口(){定义子类的内容}

4,其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。 可以理解为带内容的对象。

5,匿名内部类中定义的方法最好不要超过3个。

class Outer

{

intx = 3;

voidmethod(final int a)

{

finalint y = 4;

classInner

{

voidfunction()

{

System.out.println(y);

}

}

newInner().function();

}

}

classInnerClassDemo3

{

publicstatic void main(String[] args)

{

Outerout = new Outer();

out.method(9);

out.method(7);

}

}

继承:

特点:

1,提高了代码的复用性。

2,让类与类之间产生关系,是多态性的前提。

Java中的继承。

1,java只支持单继承,不支持多继承。因为继承了多个父类如果有相同方法时,子 类对象不确定运行哪一个。

2,Java还支持多层继承。A-->B--->C 原来可以形成继承体系。

想要使用体系功能,"查阅父类功能,建立子类对象调用功能。"

注:父类的由来其实是由事物中的共性内容不断向上抽取而来的。

所以父类中定义的是该体系中的最基本,最共性功能。

继承出现后,代码上特点:

1,变量。

当子父类中定义了相同的名称的成员变量,

子类要使用父类中的同名变量时,需要使用关键字super来区分。

一般不会出现这种情况,因为父类中有了,子类不需要定义。

而且父类定义时,一般变量都私有化。

2,函数。

子类可以直接访问父类中非私有的成员函数。

特殊情况:当子类中定义了与父类一模一样的方法时,会发生覆盖操作。大多指的是非静态方法。

最终会运行子类的方法,父类相当于被覆盖了。

函数的另一个特性:覆盖(重写,复写)。

什么时候用

当父类的功能要被修改时,不建议修改源码。只要通过一个类继承原有类,定义一个新的升级后的功能即可。但是功能是相同的,只是实现方法改变。这是子类可以沿袭父类中的功能定义,

并重写功能内容。这就是覆盖。

注意事项:

1,子类覆盖父类时,必须权限要大于等于父类权限。

2,静态不能覆盖非静态。

3,构造函数。

构造函数可以本类进行对象初始化,也可以给子类对象进行初始化。

子类对象初始化过程:

子类中的所有构造方法都会访问父类中空参数的构造函数,

因为每一个构造函数的第一行,都有一句隐式的super语句。

为什么要有这条语句?

因为子类会获取到父类中的数据,必须要先明确父类对数据的初始化过程。

当父类中没有空参数构造函数时,子类构造函数必须通过super句来明确要访问的父类中指定的构造函数。

当时子类构造函数也可以通过this语句访问本类中的构造函数。

但是子类中肯定,至少有一个构造函数会访问父类。

抽象类:在分析事物时,事物中的功能有些是不明确的内容的。这些不明确内容就是抽象的。

可以通过抽象函数来描述。

抽象函数一定要定义在抽象类中,因为,抽象函数所在类,也必须被抽象标识。

写法特点:

1,抽象函数只对函数进行声明,没有函数主体。

2,抽象类和抽象函数都需要用abstract修饰。

3,抽象类不可以进行实例化。

4,想要使用抽象功能,必须通过子类覆盖了父类中所有的抽象方法后,才可以对子类实例化。

如果只覆盖了部分抽象方法,那么子类还是一个抽象类。

也可以理解为:抽象类是一个父类,是不断向上抽取而来的,

在抽取过程中,只抽取了方法声明,但没有抽取方法实现。

抽象类和一半类差不多。

区别:

抽象类可以定义抽象方法。

抽象类不可以建立对象。

抽象类一样用于描述事物,既可以定义抽象方法,也可以定义非抽象方法。

接口

初期理解:接口看上去是一个特殊的抽象类。里面存的都是抽象方法。

特点:

格式:

1,通过interface来定义。

2,接口中常见成员:常量,抽象方法。

而且这些成员都有固定的修饰符。

常量:public static final

方法:public abstract

3,接口中的成员都是共有的。

4,一个类可以对接口进行多实现,用多实现方法来体现多继承的特性。

5,一个类可以继承一个类的同时,实现多个接口。

6,接口与接口之间是继承关系,而且可以多继承。

应用特点:

1,接口是对外暴露的规则。

2,接口是功能的扩展。

3,接口的出现降低了耦合性。

抽象类和接口异同:

相同:

1,都可以在内部定义抽象方法。

2,通常都在顶层。

3,都不可以实例化,都需要子类来实现。

不同点:

1,抽象类中可以定义抽象方法和非抽象方法,

而接口中只能定义抽象方法。

2,接口的出现可以多实现。

抽象类只能单继承。

也就是说:接口的出现避免了单继承的局限性。

3,继承和实现的关系不一致。继承:is a,实现:like a


异常:就是程序在运行时出现不正常情况。

异常由来:就是java对不正常情况进行描述后的对象体现。

对于问题的划分:两种:一种是严重的问题,一种非严重的问题。

对于严重的,java通过Error类进行描述。

对于Error一般不编写针对性的代码对其进行处理。

对与非严重的,java通过Exception类进行描述。

对于Exception可以使用针对性的处理方式进行处理。

无论Error或者Exception都具有一些共性内容。

比如:不正常情况的信息,引发原因等。

Throwable

|--Error

|--Exception

2,异常的处理

java 提供了特有的语句进行处理。

try

{

需要被检测的代码;

}

catch(异常类变量)

{

处理异常的代码;(处理方式)

}

finally

{

一定会执行的语句;

}

3,对捕获到的异常对象进行常见方法操作。

StringgetMessage():获取异常信息。

class Demo

{

intdiv(int a,int b)throws Exception//在功能上通过throws的关键字声明了该功能有可能会出现问题。

{

returna/b;

}

}

classExceptionDemo

{

publicstatic void main(String[] args)

{

Demod = new Demo();

try

{

intx = d.div(4,1);

System.out.println("x="+x);

}

catch(Exception e)//Exception e = new ArithmeticException();

{

System.out.println("除零啦");

System.out.println(e.getMessage());// / by zero;

System.out.println(e.toString());//异常名称 :异常信息。

e.printStackTrace();//异常名称,异常信息,异常出现的位置。

//其实jvm默认的异常处理机制,就是在调用printStackTrace方法。

//打印异常的堆栈的跟踪信息。

}

System.out.println("over");

}

}

自定义异常:

必须是自定义类继承Exception。

继承Exception原因:

异常体系有一个特点:因为异常类和异常对象都被抛出。

他们都具备可抛性。这个可抛性是Throwable这个体系中独有特点。

只有这个体系中的类和对象才可以被throws和throw操作。

throws和throw的区别

throws使用在函数上。

throw使用在函数内。

throws后面跟的异常类。可以跟多个。用逗号隔开。

throw后跟的是异常对象。

自定义异常时:如果该异常的发生,无法在继续进行运算,

就让自定义异常继承RuntimeException。

对于异常分两种:

1,编译时被检测的异常。

2,编译时不被检测的异常(运行时异常。RuntimeException以及其子类)


分享到:
评论

相关推荐

    Java开发技术大全(500个源代码).

    implementABS.java 继承一个抽象类 impRecall.java 实现回调函数 inheritConstruct_1.java 构造器继承示例1 inheritConstruct_2.java 构造器继承示例2 inheritConstruct_3.java 构造器继承示例3 ...

    Java开发详解.zip

    020609_【第6章:面向对象(高级)】_抽象类与接口的应用笔记.pdf 020610_〖第6章:面向对象(高级)〗_实例分析:宠物商店笔记.pdf 020611_【第6章:面向对象(高级)】_Object类笔记.pdf 020612_【第6章:面向对象...

    Java 面试宝典

    20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继 承具体类(concrete class)? 抽象类中是否可以有静态的 main 方法? ...................... 16 21、写 clone()方法时,通常都有一行...

    JAVA程序设计教程

    小课题:抽象与抽象层次.............................................................................................13 小课题:程序设计语言的历史..........................................................

    corejava培训文档

    7.7. 抽象类 7.8. 接口 (模板方法模式) 7.9. Object 类 7.10. 封装类 7.11. 内部类 7.11.1. 内部类的分类 7.11.2. 成员内部类 7.11.3. 局部内部类 7.11.4. 静态内部类 7.11.5. 匿名内部类 7.12. 集合 ...

    java核心知识点整理.pdf

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    java语言程序设计 java编程笔记 由浅入深的笔记 共32份 全套资源.rar

    【完整课程列表】 API集合.docx ...接口和抽象类以及实现类.docx 枚举enum.docx 设计模式.docx 数组.docx 网络编程.docx 线程和内部类.docx 循环和类对象.docx 异常.docx 正则表达式.docx 总结.docx

    java面向对象程序设计课程每章ppt(共15章+复习1章).zip

    第10章 static修饰符.pptx 第10章 枚举.pptx 第11章 异常和断言.pptx 第12章 JDK8中的日期.pptx 第12章 字符串、日期.pptx ...第6章 抽象类和接口.pptx 第7章 多态.pptx 第8章 包装器类.pptx 第9章 内部类.pptx

    跟我学JAVA

    第9章 多态与抽象类.ppt 第10章 接口与内部类.ppt 第11章 线程.ppt 第12章 异常处理.ppt 第13章 图形界面编程.ppt 第14章 Java IO系统.ppt 第15章 集合.ppt 第16章 Java与数据库.ppt 第17章 Java Web应用.PPT 第18章...

    Java 基础核心总结 +经典算法大全.rar

    抽象类异常 认 识 Exception 什么是 Throwable 常见的 Exception 与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch 什么是 Error 内部类 创建内部类集合 Iterable 接口顶层接口 ArrayList ...

    Java面向对象程序设计笔记

    7. 接口与抽象类的区别: 15 8. 设计模式 15 单一设计模式: 15 策略模式: 16 模板模式: 16 组合设计模式: 16 9. 多态 16 10. 内部类 17 第五章 Java集合对象 18 1.List 18 2.Set 18 3.Map...

    java学习笔记 初学者必读

    7.7. 抽象类 7-24 7.8. 接口 (模板方法模式) 7-25 7.9. Object 类 7-27 7.10. 封装类 7-28 7.11. 内部类 7-29 7.11.1. 内部类的分类 7-29 7.11.2. 成员内部类 7-29 7.11.3. 局部内部类 7-30 7.11.4. 静态内部类 7-30...

    JAVA基础入门教程

    z 类的继承(抽象类、接口、包、内部类)、数组、字符串 z Java异常处理机制 z Java基本类库介绍 z Java多线程编程 z Java I/O 流(character Stream, byte Stream, serialization) z Java Collections Framework z ...

    corejava.zip

    第6章解释接口和内部类;第7章讨论异常处理,并给出大量实用的调试技巧;第8章概要介绍泛型程序 设计;第9章讨论Java平台的集合框架;第10章介绍GUI程序设计,讨论如何建立窗口、如何在窗口中绘图、如何利用几何图形...

    Java语言程序设计实验指导书

    5 抽象类、接口与内部类 编写程序实现类的继承、与接口的编写。 6 异常 编程实现处理异常的语句,理解处理与抛出的区别,学会自定义异常。 7 Java流 用输入输出流实现从一个文本文件中读写简单数据。 8 泛型与容器...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    1.4.1 类(Class):Java世界中一类物体 14 1.4.2 方法(Method):物体的功能 15 1.4.3 main()方法:所有Java程序执行的起点 15 .1.5 名词解释 16 1.5.1 JDK和Java平台 16 1.5.2 Java编译器(Java Compiler)...

    java内部学习笔记.docx

    5.1 Java异常处理机制 49 5.2 File文件类 51 5.3 RandomAccessFile类 53 5.4基本流:FIS和FOS 55 5.5缓冲字节高级流:BIS和BOS 56 5.6基本数据类型高级流:DIS和DOS 56 5.7字符高级流:ISR和OSW 57 5.8缓冲字符高级...

Global site tag (gtag.js) - Google Analytics