面向对象的三个基本特征:封装,继承,多态;
封装:将属性私有化,不允许外部数据直接访问,并设置相应的方法对属性进行设置和读取,从而实现对属性访问的限制。这种限制属性访问的操作叫做封装。
通俗理解就是将属性封在一定的范围内,只能在给定的条件内取值。
如下代码示例,可以实现对限制年龄的取值。
private int age; public void setAge(int age){ if(age>0&&age<120){ this.age=age; }else{ System.out.println("年龄输入不合法"); this.age=-1; } } public int getAge(){ return this.age; }
继承:将多个类公用的属性和方法写在父类里,子类使用extends关键字继承父类,就可以使用父类非私有化的属性和方法。
public class ColorPrinter extends Printer{
}
1.使用继承可以:1.提高代码的复用性,子类可以调用父类非私有的属性和方法,不用再次编写。
2.提高代码的维护性。
3.将类与类联系起来,是多态的前提。
2.子类需要访问父类成员,使用super关键字。
super.属性 访问父类属性;
super.方法 访问父类方法。
如果子类中没有同名的属性和方法覆盖父类,则依然可以直接使用this.属性直接调用从父类中继承的非私有属性。
但是子类中如果重写了与父类同名的属性,this.属性访问的是本类属性。 super.属性访问的是父类属性(非私有)。
在子类构造中,如果使用super(属性名,属性名,属性名);表示调用父类的函数,而且super()函数必须在子类的第一行。
super关键字,无法访问父类的私有属性和私有方法。
public class Piano extends Instrument { public Piano() { super(); } public Piano(String brand,int weight,String size) { super(brand,weight); } }
3.子类可以访问父类的属性和方法的种类。
4.继承后变量的初始化顺序: 父类属性-父类方法-子类属性-子类方法。
5.继承只能单继承,不能多重继承:一个子类不可以有多个父类;
但是可以多层继承:子类可以当别的子类的父类。并将从父类继承的非私有属性传递给子类。
抽象类:
1.使用abstract修饰class的类,叫抽象类,[抽象类无法实例化]。
2.使用abstract修饰,而且[没有方法内容]的方法,叫抽象方法,[父类有抽象方法,子类必须重写抽象方法]。
public abstract void method();
子类继承抽象类,子类必须重写所有父类的抽象方法(除非子类也是抽象类)。
fina关键字l:
1.final修饰的类为最终类,不能被继承。
2.final修饰的方法为最终方法,不能被重写。
3.final修饰的变量为常量,不能被修改。(常量全部大写)。
public final class Bus extends MotoVehicles { }
static关键字:
static修饰的属性和方法称为类属性和类方法,也叫静态属性和静态方法。
public static String name="tom";
静态属性和静态方法可以直接使用类名调用,也可以使用对象名调用
person.name; //类名调用,推荐; p.name; //使用对象名调用
而成员属性和成员方法,也叫实例属性和实例方法,只能使用对象名调用。
4.类属性和类方法,是属于类的,在类装载的时候直接声明;
成员属性和成员方法,是属于对象的,在对象实例化时才能产生;
所以静态属性和方法将先于非静态属性和方法产生。
>>>静态方法不能调用非静态属性和方法,非静态方法能调用静态属性和方法。
静态方法中不能使用this和super(this代指本类属性,super代指父类对象,因为产生静态方法时,还没有对象)。
5.由于类属性和类方法是属于类的。因此,只会在类装载的时候产生一份;
也就是说,一个类的静态属性只能在类装载的时候产生一份,后续使用该类实例化的多个对象将共用同一个静态变量。
多态:
概念:同一种事物,因为给定条件的不同,展示出不同的结果,叫做多态。
程序中的多态:同一个引用类型,使用不同的实例,产生不同的结果。
实现多态的条件:
1.子类继承父类;
2.子类重写父类方法;
3.父类引用指向子类对象。
多态可以提高代码的维护性和拓展性。