java基础Day05 面向对象续

面向对象续

java中的包
包的作用:
区分相同名字的类
当类很多时可以有效的管理类
控制访问范围
导入包中的所有类:import com.epoint.basic.util.*;
导入包中的具体类:import com.epoint.basic.util.CommonService;
注意:同一个包中的类直接调用,无需import导入。包名全部小写。

类的封装
概念:把对象的属性和操作封装在一起,属性被保护在内部,只能通过类的成员方法才能对属性 进行操作。
访问控制修饰符:java提供四种访问控制修饰符方法和变量的访问权限。
公开级别:用public修饰,对外公开。
受保护级别:用protected修饰,对子类和同一包中的类公开。
默认级别:用friendly修饰或缺省,向同一包中的类公开。
私有级别:用private修饰,只有类本身可以访问,不对外公开。
java基础Day05 面向对象续

类的继承
由已有的类创建一个新类,新类拥有已有类中的所有特性(不受限的属性和方法),还具有自己的特性,这种方式称为类的继承。
已有的类称为父类(基类或超类)。
创建的新类称为子类
继承也被称为子类化
注意:java中所有类都是Object类的子类
格式:修饰符 class 子类名 extends 父类名
java中只能单继承,也就是说每个类只能有一个父类

继承的规则:子类继承父类所有(可见)属性和所有(可见)方法,但不继承构造方法。
实例化过程:子类的实例化先是实例化父类,然后实例化子类;要先调用父类的构造方法,再调用子类的构造方法。
成员方法的覆盖:在声明子类的成员方法时,其名称、参数、返回值都与父类的成员方法一样。
覆盖规则:
在父子类之间继承时发生
多个方法的名称相同
返回值类型必须相同
每个方法参数数量和参数类型和顺序相同
权限修饰符要求:子类方法不小于父类方法
子类方法只能抛出父类方法异常或其异常的子类

类的多态
多态性中两个重要的概念:向上转型和向下转型
向上转型:子类转父类,自动转换;向上转型会丢失子类的新扩展的属性和方法
如:Father father = new Son();
向下转型:父类转子类,强制转换;向上转型过的才能向下转型。否则会运行错误.
如:Son son = (Son)father;
方法的重载和覆盖(重写)是java中体现多态的直接方式。
重载的特性:方法名相同,返回类型、传入方法的参数不同(包括个数和类型)。
重写的特性:方法名、返回类型、参数都相同,必须发生在子类

super和this关键字
super:指向父类的引用;
this:指向本类的引用;
super()
作用:调用父类的构造器
只能出现在子类的构造器中,且必须是第一行
super()中的参数,决定了调用父类哪个构造器
如果子类构造器中没有出现super,那么默认给增加super(),即调用父类的空构造器
this()
作用:调用本类的构造器
只能写在构造器的第一行
在同一个构造器中super()和this()不能同时出现

final关键字
final可修饰的元素:
变量(属性和局部变量):不能被重新赋值
在声明中的同时赋值
在构造器中赋值
方法:不能被覆盖,即不能修改
类:不能被继承

static关键字
static可以用来修饰类的成员方法、类的成员变量。
注意:static不允许用来修饰局部变量
静态属性
静态属性与非静态属性的对比:
java基础Day05 面向对象续
静态属性在该类第一次被加载到虚拟机时,分配静态存储区,以后每次运行不在分配空间。
限制:
静态方法可以直接访问类中的其他成员变量
如要静态方法中要访问类的非静态成员,必须先实例化类
静态方法中不能使用this
静态方法不能被非静态方法覆盖

抽象类
概念:含有抽象方法的类必须声明为抽象类,用abstract声明class
抽象方法:只有方法声明,没有方法实现的方法。一般用abstract声明,以“;”结尾
例如:public abstract void getArea();
注意点:
抽象类不能被实例化
抽象类可以没有抽象方法
一旦包含了抽象方法,则这个类必须声明abstract类,并且抽象方法必须在子类中被实现,否则子类只能声明为abstract类
抽象方法不能为static
思考:抽象类中可以有构造方法吗?

接口
接口不是一个类,不能实例化
接口是常量和抽象方法的集合
接口语法:
方法权限控制符 class interface 接口名{
属性;
方法;
}
接口的特点:
接口中使用interface关键字来定义,而不是class
接口中定义的变量都是公共静态最终变量。访问形式:接口名|类名|对象名.变量名
接口中没有自己的构造函数,而且接口中定义的方法全部都是抽象方法,即只提供方法的定义,而没有提供方法的具体实现语句
接口不能继承其他类,但是可以继承其他接口

接口与抽象类的区别
接口不能含有任何非抽象方法,而抽象类可以
类可以实现许多接口,但只能有一个父类
接口不是类分级结构的一部分,没有联系的类可以实现相同的接口

包装类
java编程语言不把基本数据类型看做对象,但java为每个基本数据类型提供包装类将基本数据类型装换为对象处理。
基本数据类型:byte char short int long float double boolean
引用数据类型:Byte Character Short Integer Long Float Double Boolean
Integer类构造方法有两种:
以int型变量作为参数创建Integer对象,实例代码:
Integer number = new Integer(7);
以String型变量作为参数创建Integer对象,实例代码:
Integer number = new Integer(“7”);
Integer类常用的方法:
Object.equals(Object IntegerObj); //比较此对象与指定对象是否相等
Object.toString (); //返回一个表示该Integer值的String对象
parseInt(String str) //返回包含在由str指定的字符串中的数字的等价整数值

思考题:
1.查看String类是否有final关键字,修饰后该类是否能被继承
2.常量的定义方式
3.抽象类中是否可以有构造方法