黑马程序员-基础知识梳理3
来源:互联网 发布:玉米数据库 编辑:程序博客网 时间:2024/05/17 02:01
------- android培训、java培训、期待与您交流! ----------
继承:1.提高代码的复用性。
2.让类与类之间产生关机,也就有了多态的特性
注意:必须是类与类之间有所属关系才能继承。
java类只支持单继承,不支持多继承;一个儿子只有一个爹;
因为多继承容易带来安全隐患:因为父亲中定义了相同功能,但功能的内容不同时,子类对象不确定要运行那个。
java支持多层继承
如何使用继承体系中的功能?
先查阅父类的描述,父类中定义的是该体系的共性功能,通过了解共性功能知道该体系基本功能
在具体调用时,要创建最子类的对象
因为1.有可能父类能创建对象
2.创建子类对象能使用更多功能,基本+特有功能
概括:查阅父类功能,创建子类对象使用功能
super 代表是父亲对象的引用
final:最终,作为一个修饰符
1.修饰类,变量,函数
2.被final修饰的类不能被继承
3.被final修饰的方法不能被复写
3.被final修饰的变量是一个常量,只能被赋值一次,既可以修饰成员变量,有可以修饰局部变量
常量的书写规范: 所有字母都大写,用_连接单词
重写:保留父类功能的定义,并重写功能内容;
注意事项:1,子类覆盖父类,必须保证子类权限大于父类的权限才能覆盖,否则编译失败
如果不加修饰符,就是默认权限, 默认权限大于private 小于public。
2,静态只能覆盖静态
区别:重载:只看同名函数参数列表
重写:子父类方法要一模一样;
构造函数:在对子类的对象进行初始化时,父类的构造函数也会运行。那是因为子类的构造函数默认的第一行有一条隐式语句super();
super():会访问父类中的空参数的构造函数;
方法区,又叫共享区或数据区.用来存放类中的方法,,共享数据.
子类实例化过程:总结:子类所有的构造函数,默认都会访问父类中的空参数构造函数
而类中的加载顺序为:静态变量——静态块——成员变量——构造方法——静态方法(方法需要调用才会执行)
当父类中没有空参数的构造函数,子类必须手动通过super或者this语句形式来指定要访问的构造函数。
子类中至少有一个构造函数访问父类中的构造函数。
为什么this super 不能用在同一个构造函数中?因为他们都要卸载构造函数的第一行。为什么要写在第一行?因为初始化动作要先做。
抽象类的特点:
1、抽象方法一定定义在抽象类中,
2、抽象方法和抽象类必须被abstract关键字修饰
3、抽象类不可以用new创建对象
4、抽象类中的抽象方法被使用,必须由子类复写所有抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,那么该子类还是个抽象类。
抽象类中可以不定义抽象方法,只为了不让该类建立对象
模版方法:在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,将不确定的部分暴露出去。
用final避免复写,用abstract避免被创建对象。
接口:可以认为是一个特殊的抽象类。
当抽象类的方法都是抽象的。那么该类可以通过接口形式表示
class 定义类
interface 定义接口
常量:public static final
方法:public abstract
接口的成员都是public
interface {
public static final int NUM=3;
public abstract void show();
}
接口是不能创建对象的,因为有抽象方法,需要被子类实现,子类对接口中的抽象方法全部覆盖后,子类才可以实例化,否则子类只是个抽象类;
接口可以被类多实现,这是对多继承不支持的转换形式;
java支持多实现
接口之间的关系:extends
接口与接口之间存在多继承;
对象的多态性:
1,多态的体现;
父类的引用指向自己的子类对象
父类的引用可以接收自己的子类对象
2,多态的前提
必须类与类之间有关系,要么继承要么实现;
3,多态好处
提高程序扩展性
4,弊端
只能使用父类引用访问父类中的成员
类型提升向上转型
Animal a = new Cat();
a.eat();
向下转型:
Cat c =(cat)a;
c.catchMouse();
如果要调用cat特有方法,强制将父类的引用,转成子类类型,这叫向下转型;
不能将父类对象转成子类类型
父类的引用只想了子类的对象时,该类可以被提升,亦可以被强制转换。
多态自始自终都是子类对象在作者变化。
在多态中函数的特点:
在编译时期:参阅引用类型变量所属的类中是否存在调用的方法。如果有,编译通过,如果无,失败。
在运行期间:参阅对象所属类中是否有调用的方法。
总结:成员函数在多态调用时,编译看左边,运行看右边。
class 父亲 extends 儿子;
左边父亲右边儿子
在多态中成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类);
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边;
object类:是所有对象的直接或者间接的父亲;
该类中定义的肯定是所有对象所具备的功能;
object类中提供了对象是否相同的比较方法
只要沿袭父类中的功能,简历自己特有比较内容即可,这就是覆盖。
内部类:1,内部类可以直接访问外部类中的成员,包括私有
之所以可以直接访问外部类,是因为内部类中持有一个外部累的引用,格式:外部类名.this;
2,外部累要访问内部类,必须建立内部类对象,
内部类能被私有修饰
Outer.Inner in =new Outer().new Inner;
in.function();
Class Outer{
int x=3;
class Inner;
{
int x=4;
void function();
{
system.out.println(Outer.this.x);//输出的是3;
}
}
}
访问 格式:当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中,可以直接建立内部类对象。
格式:外部类.内部类名 变量名= 外部类对象.内部类对象
Outer.Inner in=new Outer().new Inner();
当内部类在成员位置上,就可以被成员修饰符修饰
比如private将内部类在外部类进行封装
static:内部类就具备static的特性,当内部类被static修饰后,只能直接访问外部累中的static成员,出现了访问局限。
在外部其他类中如何直接访问static内部类的非静态成员呢?
new Outer.Inner().function();
在外部类的其他类中,如何直接访问static内部类的静态成员?
Outer.Inner.function();
注意:当内部类中定义了静态成员,该内部类必须是static的,当外部累中的静态方法访问了内部类时,内部类也必须是静态的。
内部类定义在局部时:
1,不可以被成员修饰符修饰
2,可以直接访问外部类中的成员,因为还持有外部类中的引用。不可以访问他所在的局部中的变量,只能访问被final修饰的局部变量
匿名内部类
1.匿名内部类是内部类的简写格式
2.定义前提:内部类必须继承一个类或者实现接口;
3.匿名内部类定义:new 父类或接口(){定义子类的内容}
4.其实匿名内部类就是一个匿名子类对象,可以理解为带内容的对象;
5.你们内部类中定义的方法最好不超过3个
异常:
问题分2中:1种严重的问题;1种非严重的问题
严重的:java通过error类进行描述,对于error,一般不编写针对性的代码进行处理
非严重的:java通过Exception 类进行描述,对于Exception可以使用针对性的方式进行处理
异常处理:
try{需要被检测的代码}catch(异常类 变量){处理异常的代码(处理方式)}finally{一定会执行的代码}
JVM默认的异常处理机制,就是在调用printStackTrace方法,打印异常的跟踪信息。
throws Exception :在功能上通过throws的关键字声明了该功能有可能会出现问题。
自定义异常:
class FushuException extends Exception{
}
当在函数内部出现了throw抛出异常对象,那么就给队形的处理动作。
要么在内部try catch
要么在函数上声明,让调用者处理
如何定义异常信息?
子类在构造时,将异常数据传递给父类通过super语句。可以直接通过getMessage方法获取自定义的异常信息
继承Exception的原因:
异常体系特点:异常类和异常对象都被抛出。他们具有可抛性,这个可抛性是Throwable这个体系中独有特点。
只有这个体系中的类和对象猜可以被throws和throw操作。
对多异常的处理:
对方生命了几个异常美酒对应几个catch块,不可以定义多余的catch块,如果catch块的异常出现继承关系,父类异常catch块放在最下面
throw和throws的区别:
throws使用在函数上;
throw使用在函数内;
throws后跟异常类,可以跟多个,用逗号隔开
throw后跟异常对象
Exception 中特殊的子类异常:RuntimeException如果在函数内抛出该异常,函数上可以不用声明编译一样通过。如果函数上声明了该异常,调用者可以不进行处理。编译者一样通过。如果该异常的发生,无法在继续进行运算,就让自定义异常继承RuntimeException
异常分为2种:编译时被检测到的异常;编译时不被检测到的异常(运行是异常,RuntimeException以及其子类);
- 黑马程序员-基础知识梳理3
- 黑马程序员-基础知识梳理
- 黑马程序员-基础知识梳理2
- 黑马程序员-基础知识梳理4
- 黑马程序员-基础知识梳理5
- 黑马程序员-基础知识梳理6
- 黑马程序员-基础知识梳理7
- 黑马程序员-基础知识梳理8
- 黑马程序员--c#基础知识梳理
- 黑马程序员_基础知识3
- 黑马程序员_【总结】_集合框架知识梳理3
- 黑马程序员_【总结】_IO知识梳理3_(end)
- 黑马程序员_基础知识(3)
- 黑马程序员----------java基础知识(3)
- 黑马程序员_Java基础知识
- 黑马程序员-C#基础知识
- 黑马程序员 java 基础知识
- 黑马程序员_java基础知识
- 内存映射文件原理探索
- C# ASP.net 入门之简单通讯录
- 7.5.3:配置依赖
- 海量数据处理专题(八)——倒排索引(搜索引擎之基石)
- C/C++ 小知识
- 黑马程序员-基础知识梳理3
- PHP Shopping Cart Tutorial
- 驱动 加载 卸载
- Windows下C++实现线程池功能(固定线程数,自动调整未实现)(
- K&R学习笔记 第三章
- java数组(最大、小值,排序)
- HDFS---Namenode
- 2013年暑假训练题号
- 对图形API不熟悉,搞个笔记