Java基础--Java类设计
2016-06-22 00:00
260 查看
摘要: Java类的继承、多态、访问控制等
Java类只支持单继承,不允许多重继承
一个类只能有一个父类
一个父类可以派生出多个子类。
关于继承的规则:
子类不能继承父类中私有的(private)的成员变量和方法。
覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型。
覆盖方法不能使用比被覆盖方法更严格的访问权限。
super可用于调用父类中定义的成员方法
super可用于在子类构造方法中调用父类的构造方法
super的追溯不仅限于直接父类
在一个Java类中可以通过两种方式获得构造方法
使用系统默认的无参数构造方法
显式定义一个或多个构造方法
一旦显式定义了构造方法,则系统不再提供默认构造方法。
如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法
如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错
注意:
super(…)和this(…)调用语句不能同时在一个构造函数中出现
super(…)或this(…)调用语句只能作为构造函数中的第一句出现
一个变量只能有一种确定的数据类型
一个引用类型变量可能指向(引用)多种不同类型的对象
父类类型的变量可以指向子类的对象
一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法
虚拟方法调用(多态情况下):
编译时类型和运行时类型
编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类的getInfo()方法。—— 动态绑定
检验x是否为类A的对象,返回值为boolean型。
要求x所属的类与类A必须是子类和父类的关系,否则编译错误。
如果x属于类A的子类B,x instanceof A值也为true。
从子类到父类的类型转换可以自动进行
从父类到子类的类型转换必须通过造型(强制类型转换)实现
无继承关系的引用类型间的转换是非法的
在造型前可以使用instanceof操作符测试一个对象的类型
Object类是所有Java类的根父类。
如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类
例如:
==:
--引用类型比较引用(是否指向同一个对象):
Person p1=new Person(); Person p2=new Person();
if (p1==p2){…}
--基本类型比较值:
int a=5; if(a==6){…}
注:用"=="进行比较时,符号两边的数据类型必须一致(可自动转换的基本数据类型除外),否则编译出错;
equals() :
equals()方法是Object类的方法,由于所有类都继承Object类,也就继承了equals()方法。只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象。
格式:obj1.equals(obj2)
特例:
当用equals()方法进行比较时,对类File、String、Date及封装类(Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个对象。
原因:在这些类中覆盖了equals()方法。
在进行String与其它类型数据的连接操作时,自动调用toString()方法
可以根据需要在用户自定义类型中重写toString()方法。如String 类重写了toString()方法,返回字符串的值。
基本类型数据转换为String类型时,调用了对应封装类的 toString()方法
一、Java类的继承
Java类只支持单继承,不允许多重继承
一个类只能有一个父类
一个父类可以派生出多个子类。
关于继承的规则:
子类不能继承父类中私有的(private)的成员变量和方法。
二、访问控制
三、方法的重写、覆盖
在子类中可以根据需要对从父类中继承来的方法进行改造--覆盖方法(方法的重置、重写),在程序执行时,子类的方法将覆盖父类的方法。覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型。
覆盖方法不能使用比被覆盖方法更严格的访问权限。
四、Super关键字
1.在Java类中使用super来引用父类的成分
super可用于访问父类中定义的属性super可用于调用父类中定义的成员方法
super可用于在子类构造方法中调用父类的构造方法
super的追溯不仅限于直接父类
2.构造方法不能继承
子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法。在一个Java类中可以通过两种方式获得构造方法
使用系统默认的无参数构造方法
显式定义一个或多个构造方法
一旦显式定义了构造方法,则系统不再提供默认构造方法。
3.调用父类构造方法
在子类的构造方法中可使用super(参数列表)语句调用父类的构造方法如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法
如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错
注意:
super(…)和this(…)调用语句不能同时在一个构造函数中出现
super(…)或this(…)调用语句只能作为构造函数中的第一句出现
五、多态性及其应用
1.多态性
在Java中,子类的对象可以替代父类的对象使用一个变量只能有一种确定的数据类型
一个引用类型变量可能指向(引用)多种不同类型的对象
父类类型的变量可以指向子类的对象
一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法
2.虚拟方法调用(Virtual Method Invocation)
正常的方法调用:Person e = new Person(); e.getInfo(); Student e = new Student(); e.getInfo();
虚拟方法调用(多态情况下):
Person e = new Student(); e.getInfo(); //调用Student类的getInfo()方法
编译时类型和运行时类型
编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类的getInfo()方法。—— 动态绑定
3. instanceof 操作符
x instanceof A:检验x是否为类A的对象,返回值为boolean型。
要求x所属的类与类A必须是子类和父类的关系,否则编译错误。
如果x属于类A的子类B,x instanceof A值也为true。
4.对象类型转换 (Casting )
对Java对象的强制类型转换称为造型从子类到父类的类型转换可以自动进行
从父类到子类的类型转换必须通过造型(强制类型转换)实现
无继承关系的引用类型间的转换是非法的
在造型前可以使用instanceof操作符测试一个对象的类型
六、Object 类及其主要方法
1.Object 类
1.Object 类Object类是所有Java类的根父类。
如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类
public class Person { //... } //等价于: public class Person extends Object { //... }
例如:
method(Object obj){…}//可以接收任何类作为其参数 Object o=new Person; method(o);
2.==操作符与equals方法
==操作符与equals方法的区别:==:
--引用类型比较引用(是否指向同一个对象):
Person p1=new Person(); Person p2=new Person();
if (p1==p2){…}
--基本类型比较值:
int a=5; if(a==6){…}
注:用"=="进行比较时,符号两边的数据类型必须一致(可自动转换的基本数据类型除外),否则编译出错;
equals() :
equals()方法是Object类的方法,由于所有类都继承Object类,也就继承了equals()方法。只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象。
格式:obj1.equals(obj2)
特例:
当用equals()方法进行比较时,对类File、String、Date及封装类(Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个对象。
原因:在这些类中覆盖了equals()方法。
3.toString 方法
toString()方法在Object类中定义,其返回值是String类型,返回类名和它的引用地址。在进行String与其它类型数据的连接操作时,自动调用toString()方法
Date now=new Date(); System.out.println(“now=”+now); //相当于 System.out.println(“now=”+now.toString());
可以根据需要在用户自定义类型中重写toString()方法。如String 类重写了toString()方法,返回字符串的值。
s1=“hello”; System.out.println(s1);//相当于System.out.println(s1.toString());
基本类型数据转换为String类型时,调用了对应封装类的 toString()方法
int a=10; System.out.println(“a=”+a);
七、封装类
针对八种基本定义相应的引用类型—封装类相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树