java入门第四篇-面向对象的三个基本特征;

时间:2021-07-08 18:09:29

面向对象的三个基本特征:封装,继承,多态;  

封装:将属性私有化,不允许外部数据直接访问,并设置相应的方法对属性进行设置和读取,从而实现对属性访问的限制。这种限制属性访问的操作叫做封装。

通俗理解就是将属性封在一定的范围内,只能在给定的条件内取值。

如下代码示例,可以实现对限制年龄的取值。

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.子类可以访问父类的属性和方法的种类。
java入门第四篇-面向对象的三个基本特征;

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.父类引用指向子类对象。

  多态可以提高代码的维护性和拓展性。