java继承的概念

一、类与对象的概念

对象是要进行研究的任何事物,从简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表 示抽象的规则、计划或事件。
对象是一个客观存在的、唯一的实体,是一个类的动态实例,拥有自己的标识、数据与行为。

  • 对象具有状态,一个对象用数据值来描述它的状态
  • 对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为
  • 对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中

  • 具有相同特性(数据元素)和行为(功能)的对象的抽象就是类
  • 对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象 类实际上就是一种数据类型
    • 类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性
    • 类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述

消息和方法
对象之间进行通信的结构叫做消息。发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即 对象名、方法名)

  • 类中操作的实现过程叫做方法,一个方法有方法名、返回值、参数、方法体

二、继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法, 使得子类具有父类相同的行为。

  • 关键字extends
  • 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
  • 继承是is-a的相互关系
    例如:
    每个学生都是人 不是每个人都是学生

私有属性是否可被继承-
这个问题目前没有唯一的标准答案,网络上可以看到2种答案,分别是可继承和不可继承

  • 可以被继承,但是由于private的限制,所以在子类中不能直接访问
  • 不可以被继承。当构建子类对象时,首先创建父类对象,然后再创建子类对象,子类对象中包裹父类对象

子类除了拥有父类的属性和方法(拥有父类的所有成员,但是注意构造器和析构器不是成员),也可以创建自己的 特性

继承的特点

  • Java中不支持多重继承,Java中要求任何的子类只能有一个直系的双亲类

  • 可以在子类中进行覆盖定义父类中的成员方法和成员属性

  • Java支持多层继承(继承体系):C继承B,B继承A,就会出现继承体系。Java中的所有类都直接或者间接的集成于java.lang.Object类

继承的优点

  • 将所有子类的共同属性放入父类,实现代码共享,避免重复,提高开发效率
  • 可以使得修改扩展,继承而来的实现比较简单

继承的缺陷

  • 父类变,子类就必须变 继承破坏了封装,
  • 对于父类而言,它的实现细节对与子类来说都是透明的
  • 继承是一种强耦合关系

再创建对象的过程中,会先绘溯流程中所有的父类,然后才从根类开始逐层调用构造器

三、Object类

所有Java类都直接或者间接的继承自Object类,那么Object中的方法也是其他所有类都拥有的
Object类中的常用方法:

  • getClass方法用于获得当前对象的类型
  • toString() 直接打印对象名称的操作,其实就是在调用toString方法
    -为了实现用户自定义输出格式,允许在类中覆盖定义toString方法
public String toString() {    
	return "Pig [weight=" + weight + ", color=" + color + "]"; 
}
  • equals方法:Object类中的equals其实也是比较的地址值,所以如果需要比较两个元素的属性,则需要重写equals方法
public boolean equals(Object obj) {   
	return (this == obj);  //实际上在Object中定义的equals比较的是对象的引用值 
}

重写equals方法:

private Long id; 
public boolean equals(Object obj) {    
	if(obj!=null && obj instanceof Student) {        
	Student temp=(Student)obj;        
	long k1=id.longValue();//代码不够完善,因为调用方法前没有判null        
	long k2=temp.getId().longValue();        
	return k1==k2;    
	}    
	return false; 
} 
  • hashCode()方法返回一个整形数值,表示该对象的哈希码值
public native int hashCode();  //native表示该方法使用C/C++通过对等类的方式实现
  • 如果两个对象相等(依据:调用equals()方法),那么这两个对象调用hashCode()返回的哈希码也必须相等
  • 两个对象调用hasCode()返回的哈希码相等,这两个对象不一定相等 (哈希冲突)

四、包的概念

包package是类或接口的容器

  • 包是类的组织方式,提供名空间和访问控制
  • 类似于文件系统的组织

语法:package 包名称;

  • 声明包要求是源代码文件的第一个语句
  • 程序中多只能有一条package语句,没有包定义的源代码文件成为默认包中的一部分 :
  • 程序中如果有package语句,该语句必须是第一条语句(前面只能有注释或空行)

包的作用

  • 包能将相关的源代码文件组织在一起
  • 包减少了名称冲突带来的问题
  • 可以使用package指明源文件中的类属于哪个具体的包

包的使用

  • 如果其他人想使用包中类,则需要使用全名
  • 为了简化书写,Java提供了import语句: import package_name.*;
  • 引入包中的某一个类:import java.util.ArrayList;

引入包import

  • Java缺省引入的包为java.lang
  • 引入包中的类: import 包名称.类名称;例如import java.util.Date;
  • 引入整个包; import 包名称.* ;例如 import java.util.* ;
  • 不引入包而是用类,则需要是用类的全名: 包名.类名,例如java.util.Date dd=new java.util.Date();

Java中常用的包

  • java.applet用于提供Applet开发的支持,目前已经被ash所替代,很少使用,只有在某些地图系统中还有使用
  • java.awt和javax.swing用于单机软件或者c/s应用中的界面开发
  • java.io用于输入、输出操作
  • java.lang语言包,默认自动加载的包
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值