Java面向对象基础
来源:互联网 发布:怎么玩转淘宝千人千面 编辑:程序博客网 时间:2024/06/07 06:00
Java面向对象基础
源文件声明规则
- 一个源文件中只能有一个
public
类 - 一个源文件可以有多个非
public
类 - 源文件名称与
public
类名保持一致
对象
- 一个对象变量并没有实际包含一个对象,而仅仅引用一个对象
在Java中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用。new
操作符的返回值也是一个引用。 Date deadline=new Date()
表达式new Date()
构造了一个Date
类型的对象,且它的值是对新创建对象的引用。这个引用存储在deadline
中。
可以显式地将对象变量设置为null
,表示这个对象变量没有引用任何对象。- 如果一个方法应用于一个值为
null
的对象上,会产生运行错误。 - 局部变量不会自动初始化,必须通过调用
new
或设为null
初始化。
【注】Java对象变量与C++引用不同。 - C++中没有空引用,且引用不能被赋值
- Java的对象变量类似于C++的对象指针
Date birthday;//Java
等同于Date* birthday=new Date();//C++
- Java中的
null
引用对应C++中的NULL
指针 - 所有Java对象存贮在堆中。
继承
- Java的继承是单继承,即一个子类只能拥有一个父类。使用
extends
关键字 - 但可以多重继承,即使用接口,使用
implements
关键字 - 子类拥有父类非
private
的属性、方法 - 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
- 所有的类都继承于
java.lang.Object
类,当没有显式地表示继承,则默认继承该类 super
关键字。可以通过super
关键字实现对父类成员的访问,用来引用当前对象的父类。this
关键字。指向自己的引用。final
关键字。把类定义为不能继承的;或用于修饰方法,不能被子类重写。
【注】- 实例变量也可以被定义为
final
,被定义为final
的变量不能被修改。 - 被声明为
final
类的方法自动地声明为final
,但是实例变量并不是final
- 实例变量也可以被定义为
- 子类不能继承父类的构造器,但是父类的构造器带有参数的,必须在子类的构造器中显式地通过
super
关键字调用父类的构造器并配以适当的参数列表。
若父类有无参构造器,则不必须要在构造器中用super
调用父类构造器。
重写(Override)
重写是子类对父类的允许访问的方法的实现过程重新编写。即外壳不变,核心重写。
* 重写方法不能抛出新的检查异常或比被重写方法申明更宽泛的异常。
* 重写的原理,在编译阶段,只检查参数的引用类型。在运行时,JVM指定对象的类型并且运行该对象的方法。
重写规则
- 访问权限不能比父类中被重写的方法的访问权限更低。如父类的一个方法被声明为
public
,则在子类中重写该方法不能声明为protected
- 父类的成员方法只能被它的子类重写。
- 声明为
final
的方法不能被重写 - 声明为
static
的方法不能被重写,但能够被再次声明 - 子类和父类在同一个包中,则子类可以重写父类所有方法,除
private
和final
的方法 - 子类和父类不在同一个包中,子类只能重写父类的
public
和protected
的非final
方法 - 重写的方法能抛出任何非强制异常,无论被重写的方法是否抛出异常。
但,重写的方法不能抛出新的强制性异常,或比被重写方法声明的更广泛的强制性异常,反之则可以。 - 构造方法不能被重写
- 如果不能继承一个方法,则不能重写这个方法。
重载(Overload)
重载是在一个类里面,方法名字相同,而参数不同,返回类型可以相同也可以不同。
每个重载的方法必须有一个独一无二的参数类型列表
重载规则
- 被重载的方法必须改变参数列表(参数个数或类型或顺序不一样)
- 被重载的方法可以改变返回类型
- 被重载的方法可以改变返回类型
- 被重载的方法可以改变访问修饰符
- 被重载的方法可以声明新的或更广的检查异常
- 方法能够在同一个类中或在一个子类中被重载
重写与重载区别
多态的实现方式
- 重写
- 接口
- 抽象类和抽象方法
抽象类
abstract class
定义抽象类abstract
可以定义抽象方法。抽象方法没有定义,方法名后直接跟一个分号。
声明抽象方法会造成以下两个结果:- 如果一个类包含抽象方法,则该类必须是抽象类
- 任何子类必须重写父类的抽象方法,或者声明自身为抽象类。
【注】
继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该方法。否则,从最初的父类到最终的子类都不能用来实例化对象。
总结
- 抽象类不能被实例化,如果被实例化,会报错。
- 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类
- 抽象类中的抽象方法只是声明,不包含方法体,即不给出具体实现只是声明。
- 构造方法,静态方法不能声明为抽象方法。
- 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象方法。
接口
- 接口不是类。
- 除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
- 接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则必须声明为抽象类。
接口特性
- 接口中每一个方法是隐式抽象的,接口中的方法会被隐式地指定为
public abstract
,只需要使用interface
,不必使用abstract
. - 接口的每一个方法也是隐式抽象的,声明时不需要
abstarct
关键字。 - 接口中可以含有变量,但是接口中的变量会隐式地指定为
public static final
。也可以含有static
和final
变量 - 接口中的方法只能由实现接口的类来实现接口中的方法。
- 接口没有构造方法
接口与抽象类区别
public static final
静态方法 可以有静态方法和静态代码块 不能有静态方法和静态代码块 继承 一个类只能继承一个抽象类 一个类可以实现多个接口实现接口
- 类在实现接口的方法时,不能抛出强制性异常,只能在接口中或继承接口的抽象类中抛出该强制性异常。
- 一个类可以实现多个接口
- 接口允许多继承,如下
public interface Hockey extends Sports,Event
标识接口
标识接口是指没有任何方法和属性的接口,仅仅表明它的类属于一个特定的类型,供其他代码测试。
package java.util;public interface EventListener{}
主要用于以下两种目的
1. 建立一个公共的父接口
如EventListener
接口,这是由几十个其他接口扩展的Java API,可以使用一个标记接口来建立一组接口的父接口。例如:当一个接口继承了EventListener
接口,JVM就知道该接口将被用于一个事件的代理方案。
2. 向一个类添加数据类型
实现标记接口的类不需要定义任何接口方法,但是该类通过多态性变成一个接口类型。
阅读全文
0 0
- java基础 面向对象
- Java面向对象基础
- java基础-面向对象
- java面向对象基础
- JAVA面向对象基础
- Java面向对象基础
- Java面向对象基础
- java基础----面向对象
- java 面向对象基础
- 【Java基础】面向对象
- java基础面向对象
- JAVA面向对象基础
- Java基础:面向对象
- java基础---面向对象
- Java基础--面向对象
- Java基础:面向对象
- Java基础--面向对象
- java基础--面向对象
- HDU——5737 Necklace
- Google I/O Android官方新体系架构之:Lifecycle
- #Thinking in Java阅读笔记# 第一章 对象导论
- [转载]Dubbo服务治理
- html相关问题汇总
- Java面向对象基础
- mysql windows64位zip安装
- egret如何编译ts为js
- Java编程实现Math.sqart(开根号)方法
- 【C++面向对象程序设计】20170327英汉词典
- 使用idea新建spingboot+mybatis项目
- SOAP:简单对象访问协议
- android项目开发总结
- TCP UDP