面向对象
1.初识面向对象
在学习Java的过程中,相信我们对面向对象这个知识点十分熟悉。但是当我们被问到面向对象是什么的时候,大多数人可能还停留在它是一种软件开发方法的层面。当我们从生活的角度去看的时候或许会更加明了——找合适的人,做合适的事。这与“亲历亲为,自力更生”的面向过程有着本质的区别。
2.面向对象的三大特征
面向对象有三大特征,分别是封装,继承和多态。其中,封装是对方法的封装,对工具类的封装以及对框架的封装。它是模块化思想的基础。继承便是子类继承父类,通俗来说就是子承父业。多态便是多类合作。今天我着重谈一谈继承的思想。
2.1继承的实现方式
在继承中我们会用到一个关键字:extends。其格式如下:
class A extends B {
.........
}
其中,A是B的一个子类,B是A的唯一父类。
那么问题来了,是不是子类就一定能会得到父类的所有东西?并不是。子类继承父类之后,可以使用父类的非私有化成员变量和成员方法,父类的私有化内容子类是不能使用的。
class Father {
//public 修饰的公开成员变量name
public String name;
//private修饰的私有化成员变量salary
private double salary;
public Father() {
System.out.println("Father类构造方法");
}
public Father(String name, double salary) {
this.name = name;
this.salary = salary;
}
/*
* public修饰的公开方法
*/
public void game() {
System.out.println("Hungry Shark!");
}
//!!!!!!!
private void testPrivate() {
System.out.println("父类私有化方法!");
}
}
class Son extends Father {
int age;
public Son() {
System.out.println("Son类的构造方法");
}
public void work() {
System.out.println("程序员!!!");
}
}
比如说运行上述程序时,父类公开的成员变量和成员方法子类都可以使用。然而,父类中唯一定义的私有化成员方法子类便无法使用。效果如下:
2.2为什么会执行父类的无参构造方法
这里涉及到了一个关键字:super;
它用于调用父类成员方法和成员变量,显式的调用父类的构造方法。在上述程序的运行结果中我们也发现了这个问题。虽然上述程序中并未写道super关键字,但是系统会默认一个隐形的super放在该方法体的第一句 。示例如下:
public Father() {
//super的位置是固定的,移动的话,系统会报错!
super(实际参数);
.........
.........
}
在这类程序中,如果没有显式调用父类的构造方法,默认Java编译器会调用无参构造方法使用。所以,上述代码才会将父类的无参构造方法自动运行。未完待续…
Love and Share!