Java面向对象特性

概述

语言的OOP特性

Java语言支持面向对象程序语言的三个特性:封装、继承和多态

将数据的数据和操作数据的方法结合起来,并且通过方法将对象的数据和实现细节隐藏起来,就叫做封装。封装实现了对象的数据隐藏,方便对象在系统内的传递,也保证了数据的一致性并使程序易于维护。

当一个类是另一个类的特例时,这两个类就具有继承关系。子类集成了父类的属性和方法,可以重用父类中的这部分代码。Java中只支持类之间的单继承,多继承可以通过接口来实现。

多态含义为“对外一个接口,内部多种实现”。Java语言支持两种形式的多态:运行时多态和编译时多态。通过方法的重载(overloading)实现编译时多态,通过类之间的继承,接口实现实现运行时多态。多态使程序具有良好的可扩展性和可维护性。

Java中类和对象的基本概念

类是特定类型对象的定义,包括:对象包含的数据,对象的创建及对象对自身数据操作的方法。类是一个模板。对象是在其类模型基础上构造出的,是具体的实例。

类定义:

Class EmpInfo{
String name;
String designation;
String department;
void print( ){
 	 System.out.println(name+“is”+ designation+“at”+department);
}
}

对象的生成与使用:

EmpInfo  employee = new EmpInfo( );
employee.name = " Robert Javaman";
employee.designation = "Manager";
employee.department = "Coffee shop";
employee.print( );


类的定义

类的基本结构

类声明的完整格式如下:

[public][abstract|final] class ClassName [extends SuperClassName] [implements InterfaceNameList]{}

出现在大括号{}中的类体,类体提供了这个类的对象在生命周期中需要的所有代码:构造和初始化新对象的构造方法,表示类及其对象状态的变量,实现类及其对象行为的方法等。

对象的生命周期

创建对象,使用对象,清除不用的对象。当一个对象完成了所有操作后,将被垃圾收集器收集,它所占用的资源将被回收并由系统提供给其他对象使用。

对象创建与初始化过程如下:

(1) 首先为对象分配内存空间,并将成员变量进行初始化:数值型变量初值为0;逻辑型为false;引用型变量为null

(2) 然后执行显式初始化,即执行在类成员声明时带有的简单赋值表达式

(3) 执行构造方法,进行对象的初始化。

Java中,我们可以创建所需要的许多对象,运行系统会在确定某个对象不再使用时自动将其删除,这个过程叫做垃圾回收(garbage collection)。垃圾收集器收集的对象是确认不存在任何引用的对象。我们可以显式地删除一个对象的引用,即将改引用型变量值置为null

类的继承与多态

类之间的继承关系是面向对象程序设计语言(OOP)的基本特征之一,是类之间的“is a”关系,反映出一个类(子类)是另外一个类(父类)的特例。

子类继承父类的属性、功能(方法),子类中只需声明特有的东西。

private 修饰符的属性、方法是不能被继承的;构造函数不能被继承。

在方法中调用构造方法用this();调用父类的构造方法用super()

super关键字指向该关键字所在类的父类,用来引用父类中的成员变量或方法。

Java中任何一个子类的实例都可作为父类的实例使用,可以调用父类具有的方法。

子类可以改变从父类继承的行为(重写,Override),被重写方法的返回值、方法名、参数列表与父类中的方法完全一样。方法重写的规则如下:必须返回与原来方法完全相同的返回值;方法的访问权限不能缩小;不能抛出新的例外。

子类对象的创建与实例化的过程:

(1) 分配对象所需要的全部内存空间,并初始化为“0”值

(2) 按继承关系,自顶向下显式地初始化

(3) 按继承关系,自顶向下调用构造方法

class Employee{
	private Temp t1 = new Temp();
	
	public Employee(){
		System.out.println("Employee constructor");
	}
}

class Manager extends Employee{
	private Temp t2 = new Temp(2);
	
	public Manager(){
		System.out.println("Manager constructor");
	}
	
	public static void main(String[] args) {
		new Manager();
	}
}

class Temp {
	public Temp(){
		System.out.println("temp constructor1");
	}
	public Temp(int flag){
		System.out.println("temp constructor2");
	}
}

打印结果为:

temp constructor1

Employee constructor

temp constructor2

Manager constructor

可以看出实例化过程是按照继承关系自顶向下依次进行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值