zoukankan      html  css  js  c++  java
  • 面向对象4大特性

    面向对象4大特性:抽象,封装,继承,多态。

    抽象:在类的设计层次:将某些事务的共同属性提取出来集合到一个类;类与对象之间的关系:类时抽象的,对象是具体的,类是对象的模板,对象的创建时以类未模板的,同一个类创造出来的对象具有共同的属性,但属性值不同。

    封装:利用抽象数据类型将数据和基于数据的操作封装在一起(事物的属性和方法),数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他部分只有通过包裹在数据外面的被授权的操作来与这个抽象数据类型交流与交互。

    继承:继承是在父类、子类之间共享属性、方法的机制,提高代码的复用性。继承后子类拥有父类的部分属性和方法(私有属性不能继承,构造函数不能继承),子类可另外扩展属于自己的属性和方法,实现功能扩展。

    多态:以封装和继承未基础,在抽象的层面上实施一个统一的行为,到个体(具体)的层面上时,这个统一的行为会因为个体(具体)的形态特征而实施自己的特征行为。(针对一个抽象的事,对于内部个体又能找到其自身的行为去执行。)相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。常见多态形式:重写和重载。

    代码示例

    猫,狗等都是宠物,他们都有共同的属性和方法:昵称(name),年龄(age),玩耍( play() )

    pet类是所有宠物共同属性的集合

    public class Pet {
        public String name;
        public int age;
    
        public Pet() {
    
        }
    
        public Pet(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public void play() {
            System.out.println(this.name + "正在玩");
        }
    }

    Dog类,继承Pet类

    继承了Pet类的public属性,重写了play()方法,重载了play方法。

    public class Dog extends Pet {
        public Dog(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
         @Override
    public void play() { System.out.println(this.name + "狗狗正在玩皮球"); } public void play(String action) { System.out.println(this.name + "在" + action); } }

    Cat类:继承Pet类,重写play()方法

    public class Cat extends Pet {
        public Cat(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
    
        @Override
        public void play() {
            System.out.println(this.name + "小猫正在玩线团");
        }
    }

    main类

    public class Test {
        public static void main(String args[]) {
    
            Pet pet = new Dog("大黄", 3);//实例化一个pet对象
            pet.play();
    //        pet.play("sss"); // 错误,pet没有play(String action)方法
            Dog dog = (Dog) pet; //向下转型
            dog.play();
            dog.play("摇尾巴");//扩展功能,重载play,只关心结果,不关心怎么处理
            Cat cat = new Cat("粉红", 2);
            cat.play();
        }
    }

    输出结果

    附:权限修饰符作用范围

      本类 同包(子类或无关类) 不同包(子类) 不同包(非子类)
    private Y      
    默认 Y Y    
    protected Y Y Y  
    public Y Y Y Y
  • 相关阅读:
    单一index.php实现PHP任意层级文件夹遍历(原创自Zjmainstay)
    php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(原创自Zjmainstay)
    php获取页面并切割页面div内容
    jQuery单击双击实现链接的提取、插入与删除
    PHP 利用AJAX获取网页并输出(原创自Zjmainstay)
    php 数组首字符过滤功能
    点击图片添加文件在Chrome中使用的兼容问题
    php读取txt文件组成SQL并插入数据库(原创自Zjmainstay)
    为博客园添加标签云动画
    jQuery动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
  • 原文地址:https://www.cnblogs.com/GG-Bond/p/10545391.html
Copyright © 2011-2022 走看看