码迷,mamicode.com
首页 > 其他好文 > 详细

谈面向对象的三大特征

时间:2018-04-08 22:31:25      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:私有化   end   提取   处理   load   包子   引用   属性   解决问题   

 引:什么是面向对象?

 面向对象,专注于由谁(哪个对象)来解决这个问题,而调用者无需关注对象实现的细节。

 编程特点:出现了一个个的类,从类中拿到对象,通过对象直接解决问题。

 应用:Java  PHP  c++  c#  Python

 面向对象的三大特征:继承 封装 多态

 分别了解继承、封装、多态 ↓↓↓

一、继承

 1、子类继承父类,使用extends关键字。

  代码示例:

    public class Person {

      String name;

      String sex;

      int age;

    }

    public class Chinese extends Person {

      String language;

    }

    Chinese子类继承Person父类

 

 2、子类中,需要访问父类成员,使用super关键字。

    super.属性 访问父类属性

    super.方法 访问父类方法

  →  如果,子类中没有同名的属性和方法覆盖父类,则依然可以直接使用 this.属性 调用从父类中继承的非私有属性。

     但是,如果子类中重写了与父类同名的属性:this.属性 访问的是本类super.属性 访问的是父类属性

     例:     

     public class Chinese extends Person {

       String name = "aa";

 

       String language = "Chinese";

 

     }

     System.out.println(super.name);

     System.out.println(this.language);

 

  →  在子类构造函数中,直接使用super(); 表示调用父类构造。而且,super()函数必须在子类构造的第一行。

     代码示例:

     public Chinese (String name,String sex,int age,String language){

        super(name,sex,age);

        this.language = language;

     }

  注意:即使使用super关键字,也不能继承父类的私有属性和私有方法。

 

 3、子类可以访问父类哪些属性和方法?

  private           本类

  默认省略(friendly)      本类    同包 

  protected                      本类    同包   非同包子类

  public                  本类          同包        非同包子类        其他任何包都可用

  → 子类与父类不在同一包中,那么在子类中,子类实例可以访问其在父类中继承而来的protected方法,而不能访问父类实例的protected方法。

 

 4、继承后的初始化顺序:

  父类属性——父类构造方法——子类属性——子类构造方法

 

 5、在Java中,继承只能单继承,不能多重继承。

  但是,可以多层继承:

  例如:

    public class Test1{}

    public class Test2 extends Test1{}

    public class Test3 extends Test2{}

    此时,Test3就可以得到Test2和Test1两个类中的非私有属性。

 

二、封装

 1、属性的封装

  1)、将类的属性进行私有化处理,不允许外部程序进行直接访问。并对外提供统一的方法用于设置和读取私有属性;

  2)、实现访问控制,限制属性访问。但,不是拒绝访问。

    作用:只能通过规定的方法访问数据,方便在方法中加入控制语句,防止不合法数据赋值。

    get()、set()方法访问private属性  ↓

    示例:     

      public String getName() {
        return name;
      }

      public void setName(String name) {
        this.name = name;
      }

      public String getSex() {
        return sex;
      }

      public void setSex(String sex) {
        this.sex = sex;
      }

       public int getAge(){
        return age;
       }
      public void setAge(int age){
        this.age=age;
      } 

 2、封装

  除了属性的封装之外,将需要重复使用的代码提取到方法中,这叫方法的封装。

  将相同的属性和方法抽象成一个类,这也是封装的思想。

 

三、多态

 1、多态:同一种事物,由于条件的不同,展示出不同的结果,叫做多态;

   示例:

     英国人说英国话,中国人说中国话,这不叫多态。

     同样是人,有人说中国话,有人说英国话,这就是多态。

 2、程序中的多态:同一个引用类型,由于使用不同的对象实例,而执行不同的操作。

  实例:

    Chinese c = new Chinese(); c.say();

    English e = new English(); e.say();

    → 英国人说英国话,中国人说中国话,这不叫多态。

 

    Person p = new Chinese(); p.say();

    Person p = new English(); p.say();

    → 同样是人,有人说中国话,有人说英国话,这就是多态。

 3、实现多态的条件:

  ① 子类继承父类;

  ② 子类重写父类方法;

  ③ 父类引用指向子类对象。  // 保证:同一个父类引用类型,使用不同的子类对象实例,而执行不同的操作。

 

以上便是面向对象的三大特征!

 

附:

 方法重载和方法重写: 

             位置   方法名   返回值   参数列表   访问控制符

  override方法重写:  子类    相同       相同       相同         不能比父类更严格

  overload方法重载: 本类    相同       无关       不同         无关

 

 注意:由于子类无法继承父类的私有属性,因此父类中的private方法无法被重写。

 

 

谈面向对象的三大特征

标签:私有化   end   提取   处理   load   包子   引用   属性   解决问题   

原文地址:https://www.cnblogs.com/zyp777/p/8747454.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!