九、面向对象三大特征

前言

面向对象三大特性是 封装、继承、多态,设计模式几乎都以此为基础,这些特性是面向对象语言所具备的。

一、是什么?

一 . 封装

            是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的
		    将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
            成员变量为private,提供对应的getXxx()/setXxx()方法
	       优点
		   通过方法来控制成员变量的操作,提高了代码的安全性;把代码用方法进行封装,提高了代码的复用性

二 . 继承

            可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法
            一个新类继承了原有类的属性和方法,并增加了自己的新属性和新方法,称之为派生类,派生类就继承了原有类;
            当子类继承父类的时候,子类不继承父类的构造函数,但是子类生成对象时(new Student())默认会先执行父类无参的构造函数
            当父类定义有参构造函数时,需要手动书写无参函数,避免报错。
	        优点
	        减少了类的冗余代码,同时让类与类之间产生关系,为多态打下基础
		    继承可以让类与类之间产生关系,子父类关系,产生子父类后,子类则可以使用父类中非私有的成员。
	        提高了代码的复用性(多个类相同的成员可以放到同一个类中)
            提高了代码的维护性(如果方法的代码需要修改,修改一处即可
	        弊端
	        继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性
	       考虑应用范围,类与类之间是否存在is..a的关系(谁是谁的一种),不能随意继承(例如:老师和学生是人的一种,那人就是父类,学生和老师就是子类)

三 . 多态

             前提
             - 要有继承或实现关系
             - 要有方法的重写
             - 要有父类引用指向子类对象 
             多态性(polymorphisn)是允许将父对象设置成为和一个或更多的他的子对象相等的方法,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
             实现多态,有二种方式,覆盖,重载。
             覆盖,是指子类重新定义父类的虚函数的做法。
             重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
             好处
             提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作
             弊端

二、怎么实现?

一 . 封装(标准类的制作)

class Student {
    //成员变量
    private String name;
    private int age;

    //构造方法
    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //成员方法
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void show() {
        System.out.println(name + "," + age);
    }
}

二 . 继承

public class Fu {
    public void show() {
        System.out.println("show方法被调用");
    }
}
public class Zi extends Fu {
    public void method() {
        System.out.println("method方法被调用");
    }
}
public class Demo {
    public static void main(String[] args) {
        //创建对象,调用方法
        Fu f = new Fu();
        f.show();

        Zi z = new Zi();
        z.method();
        z.show();
    }
}

三 . 多态

需求:请采用多态的思想实现猫和狗的案例,并在测试类中进行测试

//测试类
public class AnimalDemo {
    public static void main(String[] args) {
        //创建猫类对象进行测试
        Animal a = new Cat();
        a.setName("加菲");
        a.setAge(5);
        System.out.println(a.getName() + "," + a.getAge());
        a.eat();

        a = new Cat("加菲", 5);
        System.out.println(a.getName() + "," + a.getAge());
        a.eat();
    }
}

//动物类
public class Animal {
    private String name;
    private int age;

    public Animal() {
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public void eat() {
        System.out.println("动物吃东西");
    }
}
//猫类
public class Cat extends Animal {

    public Cat() {
    }

    public Cat(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}
//狗类
public class Dog extends Animal {

    public Dog() {
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}


总结

             以上就是今天要讲的内容,本文浅述了面向对象三大特征的基础概念和理解。封装,目的是增强数据安全性、简化编程;继承,指将多个相同的属性和方法提取出来,新建一个父类,目的是代码复用;最后一个多态,目的是增加代码的灵活度。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值