Java面向对象基础
2017-10-18 22:55
246 查看
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. 向一个类添加数据类型
实现标记接口的类不需要定义任何接口方法,但是该类通过多态性变成一个接口类型。
b666
相关文章推荐
- java基础之面向对象
- Java面向对象基础三
- 重踏学习Java路上_Day06(java 基础下与面向对象,二维数组与面向对象基础)
- [零基础学JAVA]Java SE面向对象部分-12.面向对象基础(07) 推荐
- 巩固JAVA面向对象基础应用 -- 实现小巧的数据库1
- Java面向对象基础
- java-面向对象基础
- 黑马程序员----JAVA基础----面向对象基础篇
- 黑马程序员<java基础<面向对象基础知识点>>
- android入门学习-java面向对象基础
- java基础09:面向对象描述
- 关于JAVA面向对象基础整理以及个人的理解(适合初学者阅读)
- java基础复习 面向对象,String类,正则表达式
- java基础——面向对象
- Java基础04 - 面向对象1(类与对象)
- 黑马程序员----java基础面向对象特点及封装
- JAVA面向对象基础
- 黑马程序员 Java基础——面向对象思想
- [零基础学JAVA]Java SE面向对象部分-17.面向对象高级(05) 推荐
- “黑马程序员”java面向对象基础_内部类