6、面向对象3大特性:封装、继承和多态
6.1 封装性:
每个对象都包含了他能进行操作所需要的所有信息,因此对象不必依靠其他的对象来完成自己的操作,这样的特性叫封装。
例如:
class Person{
private int age;
public void setAge(int i){
if(i<0 || i>130)
return;
age = i;
}
public int getAge(){
return age;
}
}
public class TestPerson{
public static void main(String args[]){
Person p1 = new Person();
p1.setAge(3);
p1.setAge(-6);
System.out.println(p1.getAge());
}
}
实现封装可以达到如下目的:
1)隐藏类的实现细节;
2)让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
3)便于修改,增强代码的可维护性;
4)可进行数据检查;
6.2 继承性
继承代表了一种“is-a”的关系,个人觉的继承的最大好处是少些好多的代码及多态功能
例如:
class Person{
public String name;
public int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public Person() { //如果你不写这个构造函数,看看对类Student有什么影响。
}
public void getInfo(){
System.out.println(name);
System.out.println(age);
}
}
class Student extends Person{
public void study(){
System.out.println("Studding");
}
public static void main(String[] args){
Person p=new Person();
p.name="person";
p.age=30;
p.getInfo();
Student s=new Student();
s.name="student";
s.age=16;
s.getInfo();
s.study();
}
}
在类的继承中,有这样的一些细节问题:
1).通过继承可以简化类的定义,我们已经在上面的例子中了解到了。
2).Java只支持单继承,不允许多重继承。在Java中,一个子类只能有一个父类,不允许一个类直接继承多个类,但一个类可以被多个类继承,如类X不可能既继承类Y又继承类Z。
3).可以有多层继承,即一个类可以继承某一个类的子类,如类B继承了类A,类C又可以继承类B,那么类C也间接继承了类A。这种应用如下所示:
class A {}
class B extends A{}
class C extends B{}
4).子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法。在子类的构造方法中可使用语句super(参数列表) 调用父类的构造方法。如:我们为Student类增加一个构造方法,在这个构造方法中我们用super明确指定调用父类的某个构造方法。
class Student extends Person{
public Student(String name,int age,String school)
{
super(name,age);
this.school=school;
}
}
5).如果子类的构造方法中没有显式地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则在产生子类的实例对象时,系统默认调用父类无参数的构造方法。也就是,在下面的类B中定义的构造方法中,写不写super()语句效果是一样的。
Public class B extends A{
public B(){
super();//有没有这一句,效果都是一样的。
}
}
6.3 多态性
定义:是允许将父对象设置成为和一个和多个它的子对象相等的技术,比如Parent=Child 赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。
1).子类转换成父类
例如:
class A{
public void func1()
{
System.out.println("A func1 is calling");
}
public void func2()
{
func1();
}
}
class B extends A{
public void func1()
{
System.out.println("B func1 is calling");
}
public void func3()
{
System.out.println("B func3 is calling");
}
}
class C{
public static void main(String [] args)
{
B b=new B();
A a = b;
callA(a);
callA(new B());
}
public static void callA(A a)
{
a.func1();
a.func2();
}
}
2).父类转换成子类
例如:
public static void CallA(A a){
B b=(B)a;
b.func1();
b.func2();
b.func3();
}
3).instanceof 操作符
可以用instanceof 判断是否一个类实现了某个接口,也可以用它来判断一个实例对象是否属于一个类。还是用上面的代码来举例:
public static void CallA(A a){
if(a instanceof B){
B b=(B)a;
b.func1();
b.func2();
b.func3();
}else{
a.func1();
a.func2();
}
}
4).在前面讲到的子类自动转换成父类的例子中,我们的调用程序是这么写的:
class C{
public static void main(String [] args){
B b=new B();
A a = b;
callA(a);
callA(new B());
}
public static void callA(A a){
a.func1();
a.func2();
}
}
程序运行结果是:
B func1 is calling
B func1 is calling
B func1 is calling
B func1 is calling
分享到:
相关推荐
Educoder题目:Java面向对象 - 封装、继承和多态答案解析
Educoder题目:Java面向对象 - 封装、继承和多态的综合练习答案解析
JAVA面向对象基础测试题-继承-封装-多态等测试题.docx
java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素...
java基础_继承封装 多态,概念的梳理,对初学者很有帮助,看一遍就清楚了
使用C语言实现封装,继承,多态等面向对象的特性使用C语言实现封装,继承,多态等面向对象的特性使用C语言实现封装,继承,多态等面向对象的特性使用C语言实现封装,继承,多态等面向对象的特性使用C语言实现封装,...
} 创建接口的步骤 2-2 接口使用示例 总结 封装、继承和多态是面向对象的主要特征 继承可提高代码的重用性,使用extends关键字来实现。除了构造方法之外,父类的所有 方法和属性都被子类的对象继承 多态性是不同的...
Java编程实训 Java开发基础入门教程1-06 面向对象编程-继承和多态(共28页).ppt Java编程实训 Java开发基础入门教程1-07 面向对象编程-接口和常量(共28页).ppt Java编程实训 Java开发基础入门教程1-08 面向对象...
Python 101.面向对象的三大特征说明(封装、继承、多态).mp4
06 面向对象编程-继承和多态(共28页).ppt 07 面向对象编程-接口和常量(共28页).ppt 08 面向对象编程进阶(共37页).ppt 09 Java异常处理机制和调试(共32页).ppt 10 java集合框架(共27页).ppt 11 JAVA UI ...
该文档是我参加java培训期间学到面向对象还有集合的时候所记录的笔记,有图有文字,主要有继承,封装,多态和集合,非常适合刚学习的新手,很有建设性,对小白帮助比较大
JavaSE 之前整理的笔记,...面向对象3(封装 继承 多态),7.面向对象4(抽象类 接口 包装类),8.GUI编程--awt,9.GUI编程--计算器案例,10.GUI编程--Swing,11.集合,12.多线程,13.IO流,14.网络编程,15.JDBC编程,16.异常处理
java语言实验3指导面向对象程序设计继承、封装、多态.docx
面向对象编程二继承封装和多态2022优秀文档.ppt
Java面向对象试题-IT公司
本文主要介绍了面向对象的三大特性:封装、继承、多态,提供了简单的示例供大家参考和理解。
整理的一些c#基础复习题(含答案)包含以下目录内容的题目 1.枚举类型 2.结构体 3....面向对象三大特性-封装 10.面向对象三大特性-继承 11.面向对象三大特性-多态 12.抽象类和虚方法 13. 接口
主要介绍了Java面向对象编程(封装/继承/多态)实例解析的相关内容,具有一定参考价值,需要的朋友可以了解下。
6.1. 面向对象与面向过程 6-11 6.2. 对象的概念 6-12 6.3. 成员变量和局部变量 6-12 6.4. 成员方法 6-12 6.5. This关键字 6-13 6.6. 访问控制符 6-13 6.7. 构造方法 6-13 6.8. 数据和方法的隐藏―――封装 6-14 6.9....
6.1. 面向对象与面向过程 6-11 6.2. 对象的概念 6-12 6.3. 成员变量和局部变量 6-12 6.4. 成员方法 6-12 6.5. This关键字 6-13 6.6. 访问控制符 6-13 6.7. 构造方法 6-13 6.8. 数据和方法的隐藏―――封装 6-14 6.9....