Java面向对象的三大特性
Java面向对象的三大特性
Java面向对象的三大特性分别为:封装、继承、多态,下面我们一起来详细了解一下!
1.封装:
说得通俗一点,就是把细节隐藏起来,把该公开的公开,把该私有的私有。
那如何封装一个类?
类中含属性和方法, 属性可有可无,并且应该设置为private.
方法可有可无,对外的方法的应该公开,对内的方法应该私有.
一个类的方法,大致有:
构造方法 -> 可以生成
存/取 属性值的方法,也就是 getter/setter 属性方法. -> 可以生成
业务方法,实现此类对象的真正业务功能,是程序员真正需要花心思考虑的。
针对类中的方法,有以下两种封装策略:
1).把存/取属性方法、构造方法、业务方法全部封装到同个类中。
2).把业务方法单独独立出来,形成一个业务类,这个类用来操作与它所相关的实体对象。它一般由接口与实现类组成.
实体(Entity)对象,就是指含业务属性和属性存/取 方法的对象.
如:封装策略一:
public class Account {
private long id;
private String name;
private double balance;
private String pwd;
....
// getter/setter方法
// 构造方法
....
// 业务方法
public void withdraw(double money) {
if(balance < money) {
System.out.println("余额不足");
return ;
}
balance -= money;
}
public void deposit(double money) { }
}
//采用封装策略二:
首先是实体类
public class Account {
private long id;
private String name;
private double balance;
private String pwd;
....
// getter/setter方法
// 构造方法
}
//再定义一个业务类,操作Account
public class AccountService {
// 业务方法
public void withdraw(Account a,double money) {
Balance() < money) {
java面向对象的特征有哪些方面System.out.println("余额不足");
return ;
}
a.Balance - money);
}
public void deposit(Account a, double money) { }
}
注:此处在真实的场景中应该由接口与实现类组成。
2.继承
关键字: extends
类继承的语法:
public class 子类名 extends 父类名 {
//属性定义
//方法定义
}
注:一个类A继承了另一个类B,那么类A中就继承(得到)了类B中所有的非私有成员.
继承的特点:
1).传递性,如果A继承B,C又继承A, 那么C也继承B。
2).JAVA是单继承的。
JAVA中有一个顶级父类,就是java.lang.Object 类如果一个类没有继承任何父类,那么它将会自动继承于Object类.
单继承的.特点,可以保证JAVA的整个类层次结构一颗“倒置树”状结构
如:
//父类
public class Super {
private String name;
//
//..
}
// 子类
public class Sub extends Super {
//...
}
继承所产生的几个概念:
父类,也叫超类,或叫 基类。
子类,也叫派生类。
何时使用继承?
当两个类之间具备“ IS A "的关系时,才应该采用继承关系. 否则,不要滥用继承.
如:
Apple IS A Fruiut
Cat is a Animal
...
继承是一种代码复用技术,但是提出这个“IS A”的参考要求是为了更好地“限制”继承,因为,代码复用技术除了继承外,还有其它的设计思想,比如 组合/聚合设计思想.
-- ----------------------------------------------------------
对象创建的过程:
a).分配空间
b).赋初始值
c).调用构造方法
如果有了父类,则应该是:
第一步:递归地按以上三步创建 父类对象.
## >>>>>>>>####
创建子类对象时,一定会递归地创建父类对象
## >>>>>>>>####
super关键字:
作用:
a).在构造方法中使用,调用父类构造方法,必需放在第一条语句
b).当子类的属性与父类属性同名时,并且父类的属性不是private的这种情况下,在子类中,存在2个同名的属性,那么子类的属性会掩盖(shadow)掉父类的同名属性,这时,可以通过super.属性名来区别。
-- -------------------------------------------------------
有了继承关系,父类类型的引用可以指向任意的子类对象。
编译时类型
就是指变量在编译时的类型,也就是申明变量时它的类型
运行时类型
就是指代码运行时变量的真正类型,也就是new操作符后面所跟的对象类型.
如:
Animal c2;
c2 = new Cat(); //可以指向 Cat的实例
Object c3 = new Cat(); //Object类型的引用可以指向任意对象。
c3.catchMouse(); // error, 此处不能调用此方法。
所以,Object类型可以成为任意对象的编译时类型.
但是,编译时类型只能看到编译时类型所拥有的成员.[这就是为什么c3.catchMouse() 会报错,因为c3的编译时类型是Object,并没有catchMouse()方法]
-- ------------------------------------------------------

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论