面向对象的三大特性:封装,继承,多态
封装:
封装就是把属性打包起来,方便管理。如何把属性打包起来?就是定义两个方法,分别是getXXX()用于获取成员变量和setXXX()用于赋值成员变量。为了实现封装的良好性。示例:
public class Text {
static int a;
public static int getA() {
return a;
}
public static void setA(int a) {
Text.a = 123;
}
public static void main(String[] args) {
Text.setA(0);
System.out.println(Text.a);
}
}
输出:123
这里不得不回忆一下static,是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。静态方法中,使用静态变量和静态方法可以是类名.变量名,使用非静态变量就必须先实例化。
一般使用private声明成员变量。稍微回忆一下声明成员变量的修饰符(private,protected,friend,public)。
- 私有权限(private)只能在定义它们的类中访问。
- 默认权限(friend、default)同包的中类可以访问。
- 受保护权限(protected)同包的中的类可以访问。包外子类可以继承,不可以访问。
- 公共权限(public)任何地方的类都可以访问,是权限最大的一个修饰符。
class Father{
public void run(){
System.out.println("This is Father.run()");
}
}
class Child extends Father{
public void run(){
System.out.println("This is Child.run()");
}
}
class Test{
public static void main(String[] args){
Father a = new Child();
a.run();
}
}
输出:This is Child.run()
这里又联系到了方法的重写,下面多态会有所解释。
说到继承,不得不解释一下super的用法,可以使用super访问父类中被子类隐藏的或覆盖(重写)的方法。当前类如果是从超类继承而来的,当使用super.XX()就是调用了超类版本的XX()方法。
public class Father {
public void run(){
System.out.println("This is Father.run()");
}
}
public class Text extends Father{
public void run(){
super.run();
System.out.println("This is Child.run()");
}
public static void main(String[] args) {
Father f =new Text();
f.run();
}
}
输出:
This is Father.run()
This is Child.run()
再来一个比较特殊的:
public class Father {
Father(){
System.out.println("father");
}
}
public class Text extends Father{
Text(){
super();//这里的super存在与否,输出结果是一样的,因为如果没有这句的时候会默认有这句的
System.out.println("son");
}
public static void main(String[] args) {
Father f =new Text();
}
}
输出结果:
father
son
多态:所谓多态就是同一个方法可以有多种不同的表现形式,具体说来分为重载和重写。
重载就是父类和子类都存在一个同名但不同参数的方法,给一个简单的示例吧..
public void run(){System.out.println("This is Father.run()");}
public void run(int i){System.out.println("This is Child.run()");}
这有什么用?由于静态方法是这和类有关联的,this和super是和对象有关联的,所以this和super只能用在非静态方法中,那如果在实例化子类后要使用到父类的run()方法,就可以用带参数来避免重写覆盖掉。
重写就是父类和子类都存在一个同名且同参数的方法,示例?看看继承的第一个示例就可以了。