------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Java面向对象之封装、继承和多态
(1).把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中(类);
(2)."信息隐藏", 把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,字段;
封装机制在程序中的体现是:把描述对象的状态用字段表示,描述对象的行为用方法表示,把字段和方法定义在一个类中,并保证外界不能任意更改其内部的字段值,也不允许任意调动其内部的功能方法。
程序中的一种体现:通常将类中的成员变量私有化(private),通过对外提供方法(setXxx,getXxx),可对该变量(xxx)进行访问。
boolean 类型的变量没有getXX,只有 isXX;
如:class Myclass {
private int age;
private String name;
private double height;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
}
2.继承
继承是一种从一般到特殊的关系;
特点:
1、提高了代码的复用性。
2、让类与类之间产生关系,有了这个继承关系才有了多态的特性。
3、Java语言中只支持单继承(有别于C语言)。
因为多继承容易带来安全隐患(父类多了,功能相同的话,就会出现调用不确定性吗,覆写一个方法,到底覆写的谁的?)。
ps:接口可以实现多继承
4、Java支持多层继承,object是每个类的超类,实现树形结构。
格式:
[修饰符] class SubClass extends SuperClass
如:
class SuperClass {
String name;
SuperClass(){
System.out.println("父类默认隐式构造函数");
}
SuperClass(String name){
System.out.println("父类显式构造函数"+name);
}
}
class SubClass extends SuperClass{
SubClass(){
super();
System.out.println("子类默认隐式的构造方法");
}
}
public class test{
public static void main(String[] args) {
new SubClass();
}
}
输出:
父类默认隐式构造函数
子类默认隐式的构造方法
3.多态
实现多态的机制:父类的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动态绑定,
就是引用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,
做出通用的编程,以适应需求的不断变化。只修改方法的实现,不必修改方法的声明继承和覆盖是多态产生的前提条件;
如:
class Fu{
int num = 10;
public void mehtod1(){
System.out.println("method1");
}
}
class Zi extends Fu{
int num = 20;
public void mehtod2(){
System.out.println("method2");
}
public void mehtod3(){
System.out.println("method3");
}
}
public class test{
public static void main(String[] args) {
Fu f = new Zi();
System.out.println(f.num);
f.mehtod1();
Zi z = new Zi();
z.mehtod1();
z.mehtod2();
z.mehtod3();
System.out.println(z.num);
}
}
输出:
10
method1
method1
method2
method3
20
总结:多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,若无编译失败
在运行时期:参阅对象所属的类中是否有调用的方法。
就是成员函数在多态调用时,编译看左边,运行看右边。
多态中成员变量的特点:
无论编译还是运行,都参考左边(引用型变量所属的类)