栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

面向对象

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面向对象

面向对象

1.封装:
利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节,但可以通过对象对外提供的接口来访问该对象。
优点:
1. 减少耦合: 可以独立地开发、测试、优化、使用、理解和修改
2. 减轻维护的负担: 可以更容易被程序员理解,并且在调试的时候可以不影响其他模块
3. 有效地调节性能: 可以通过剖析确定哪些模块影响了系统的性能
4.降低了构建大型系统的风险: 即使整个系统不可用,但是这些独立的模块却有可能是可用的
5. 提高软件的可重用性
以下 FengZhuan 类封装 name、gender、age 等属性,外界只能通过 get() 方法获取一个 Person 对象的 name 属性和 gender 属性,而无法获取 age 属性,但是 age 属性可以供 work() 方法使用。
注意到 gender 属性使用 int 数据类型进行存储,封装使得用户注意不到这种实现细节。并且在需要修改 gender 属性使用的数据类型时,也可以在不影响客户端代码的情况下进行。

package cz.oneday.csdn;

public class FengZhuan {

private String name;
private int gender;
private int age;

public String getName() {
    return name;
}

public String getGender() {
    return gender == 0 ? "男人" : "女人";
}

public void work() {
    if (18 <= age && age <= 50) {
        System.out.println(name + " 是个"+getGender()+",正是努力工作的年龄");
    } else {
        System.out.println(name + " 是个"+getGender()+", 好好养身体的年龄");
    }
}

public static void main(String[] args) {
    FengZhuan c = new FengZhuan();
    c.name="cz";
    c.gender=0;
    c.age=24;
    c.work();
}

}


2.继承
继承实现了 IS-A 关系,例如 Cat 和 Animal 就是一种 IS-A 关系,因此 Cat 可以继承自 Animal,从而获得 Animal 非 private 的属性和方法。
继承应该遵循里氏替换原则,子类对象必须能够替换掉所有父类对象。 Cat 可以当做 Animal 来使用,也就是说可以使用 Animal 引用 Cat 对象。
父类引用指向子类对象称为 向上转型 。

Animal animal = new Cat();

3.多态
多态分为编译时多态和运行时多态:
1.编译时多态主要指方法的重载
2. 运行时多态指程序中定义的对象引用所指向的具体类型在运行期间才确定
运行时多态有三个条件:
1.继承
2.覆盖(重写)
3.向上转型
下面的代码中,duotai有两个子类: Wind 和 Percussion,它们都覆盖了父类的 play() 方法,并且在 main() 方法中使用父类duotai来引用 Wind 和 Percussion 对象。在 duotai 引用调用 play() 方法时,会执行实际引用对象所在类的 play() 方法,而不是 duotai类的方法。

package cz.oneday.csdn;

import java.util.ArrayList;
import java.util.List;

public class Duotai {
        public void play() {
            System.out.println("Instrument is playing...");
        }
    }

    class Wind extends Duotai{
        public void play() {
            System.out.println("Wind is playing...");
        }
    }

    class Percussion extends Duotai {
        public void play() {
            System.out.println("Percussion is playing...");
        }
    }

    class Music {
        public static void main(String[] args) {
            List< Duotai >  duotais = new ArrayList<>();
            duotais.add(new Wind());
            duotais.add(new Percussion());
            for(Duotai duotai : duotais) {
                duotai.play();
            }
        }
    }


4.接口和抽象类有什么共同点和区别?
共同点 :
1.都不能被实例化。
2.都可以包含抽象方法。
3.都可以有默认实现的方法(Java 8 可以用 default 关键字在接口中定义默认方法)。
区别 :
1.接口主要用于对类的行为进行约束,你实现了某个接口就具有了对应的行为。抽象类主要用于代码复用,强调的是所属关系(比如说我们抽象了一个发送短信的抽象类,)。
2.一个类只能继承一个类,但是可以实现多个接口。
3.接口中的成员变量只能是 public static final 类型的,不能被修改且必须有初始值,而抽象类的成员变量默认 default,可在子类中被重新定义,也可被重新赋值

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027171.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号