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

面向对象:

面向对象专注于由谁来解决这个过程,而调用者无需关注对象实现的细节

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

类:具有一系列相同属性(特征)和方法(行为)的个体的集合 称为类

类是一个抽象的概念,只能说类具有哪些属性而不能直接对类进行赋值

例如 人类有身高这个属性,但是不能说人类的身高是180

对象:从类中拿出具有具体属性值的个体,称为对象

对象是从类中拿出的一个具体的个体,需要对属性进行具体的赋值

例如 人类有身高这个属性,张三是人类的一个个体,就可以说张三身高是180   张三就是人类的一个对象

类和对象的关系

  1. 类是对象的抽象化,对象是类的具体化
  2. 类是对象的描述,对象是类的个体(实例化)
  3. 程序中由类产生对象.

属性的封装(一般使用private关键字实现)

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

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

封装的作用

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

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

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

private  int  age;

    public void setAge( int age) {
        if (age>0&&age<100) {
            this.age=age;
        }else {
            System.out.println("输入年龄不合法");
            this.age=-1;
        }
    }

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

set 方法用来赋值      get方法用来读值

并且可以在set方法中设置判断条件,例如上例就是判断年龄是否符合常识

类的继承

1. 子类继承父类   使用 extends 关键字

子类继承父类 不能继承父类的私有属性

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

super.属性  访问父类属性

super.方法() 访问父类方法

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

如果,子类中有同名的属性和方法,this.属性访问的是本类   super.属性访问的是父类的属性

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

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

3.子类可以访问父类的哪些属性

①private     本类

②默认()   本类   本包

③protected   本类   本包   非同包子类

④public      本类   本包   非同包子类        其他包

子类可以访问父类的构造方法

4.继承后的初始化顺序

  1. 父类属性
  2. 父类构造方法
  3. 子类属性
  4. 子类构造方法

5.使用继承可以: ①提高代码的复用性,子类可以调用父类非私有的属性和方法,不用再次编写。

         ②提高代码的维护性。

         ③将类与类联系起来,是多态的前提。

 继承只能单继承,不能多重继承,但是可以多层继承  

          public class a;

            public class a2 extends   a;

            public class a3 extends   a2;

此时,a3就得到了a和a2两个类的非私有属性

多态

同一种事物,由于条件不同,产生不同的结果

程序中的多态

同一个引用类型,由于使用不同的对象实例而执行不同的操作

Chinese c=new chinese(); c.say();
english e=new english(); e.say();

英国人说英语,中国人说中文   这不叫多态

person p=new chinese();        p.say();
person p=new english();         p.say();

同样是人  有人说英语,有人说中文    这叫多态

实现多态的条件

①子类继承父类

②子类重写父类方法

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

abstract关键字

抽象类

使用abstract关键字修饰的类,称为抽象类

抽象类.不能被实例化

抽象方法

使用abstract关键字修饰,而且没有方法体的方法,称为抽象方法

抽象方法.子类继承抽象类,那么,子类必须重写父类的所有抽象方法,除非子类也是抽象类

抽象方法必须写在抽象类中

抽象类中的方法不一定是抽象方法

例题:

请编码实现如下需求:
  乐器(Instrument)分为:钢琴(Piano)、小提琴(Violin) 乐器(Instrument)包含品牌(brand)、重量(weight),
 钢琴(Piano)还包含尺寸(size),小提琴(Violin) )还包含长度(length)

各种乐器的弹奏( play )方法各不相同

在做类似题目时,最好按照以下步骤

  1. 发现类
  2. 发现类的属性
  3. 发现类的方法

建一个父类(Instrument类  Instrument类有两个属性:品牌(brand)、重量(weight)以及一个抽象方法:弹奏( play )方法)

  public abstract class Instrument{

    private String brand;
    private String weight;
    public abstract void play();

    public Instrument() {
        super();
        }
    public Instrument(String brand, String weight) {
        super();
        this.brand = brand;
        this.weight = weight;
        }

    public String getBrand() {
        return brand;
      }
    public void setBrand(String brand) {
        this.brand = brand;
      }
    public String getWeight() {
        return weight;
      }
    public void setWeight(String weight) {
        this.weight = weight;
      }

}

建两个子类(钢琴(Piano)、小提琴(Violin))

钢琴(Piano)类中有私有属性尺寸(size)

public class Piano extends Instrument{

    private String size;
    public String getSize() {
        return size;
    }
    public void setSize(String size) {
        this.size = size;
    }

public Piano(String size) {
        super();
        this.size = size;
    }
    public Piano() {
        super();
    }
    @Override
    public void play() {
        // TODO Auto-generated method stub
        System.out.println("演奏家弹钢琴");
    }
}

小提琴(Violin)类中有私有属性长度(length)

public class Violin extends Instrument {

    private String length;

    public String getLength() {
        return length;
    }
    public void setLength(String length) {
        this.length = length;
    }

    public Violin(String length) {
        super();
        this.length = length;
    }
    public Violin() {
        super();
    }
    @Override
    public void play() {
        // TODO Auto-generated method stub
         System.out.println("演奏家拉小提琴");
    }
}
    

建一个多态类

演奏家  (演奏方法)

public class Performer {

    public void make(Instrument p) {
        p.play();

    } }
    

最后建一个测试类

public static void main(String[] args) {

        Performer t=new Performer();
        t.make(new  Piano());
        t.make(new Violin());

    }

运行结果为:

原文地址:https://www.cnblogs.com/fylong/p/8745991.html

时间: 2024-11-13 07:23:25

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

面向对象的三大特征,封装、继承、多态的个人理解以及代码分析

面向过程:我们以前使用的是面向过程编程,你需要清除每个实现步骤,每个步骤每行代码都要仔仔细细的编写, 不知道过程就找不到结果,找到实现过程就可以得到实现结果. 例如: 我们在外打工租房子,我们需要了解每个每个房屋的出租信息,不然是找不到房子的. 面向对象:对象帮我们做事情,找到对应的对象我们就可以得到想要的结果.    例如: 我们找房子不在如此的繁琐,只要找到中介我们就不怕没有地方住,中介会帮你找房子,你只需支付对应的服务费即可. 面向对象的三大特征给我们带了巨大的好处,下面我们就来讲解一下.

小学生之面向对象的三大特征(封装、继承、多态)

在前一篇文章中,我们讲了面向对象的特征之一(封装),那么今天我们来了解面向对象的剩余两大特性. 一.继承 1.定义 继承就是从父类中获取一些公开的成员,如方法和属性.C#中只允许继承一个父类,但允许继承多个接口.如果子类继承接口,则必须实现接口中定义的所有公开成员. 公开成员是指在父类中定义为public的成员(public的作用域可在子类中生效,而private作用域则不可) 子类继承父类: 子类拥有父类非Private的属性和功能: 子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功

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

封装: 封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法),才能对数据进行操作. 封装--访问控制修饰符(Java提供四种访问控制修饰符) 1.public  :公开级别,范围最广的. 2.protected:受保护级别,对子类和同一个包内的类公开. 3.default:默认级别,可以不写修饰符号,向同一个包的类公开. 4.private:私有级别,只有类本身可以访问,不对外公开. 继承: 继承可以解决代码复用,让我们的编程更加靠近人

C#面向对象的三大特征继承、封装、多态学习总结

1.基类和扩充类 (1)C#实现继承的方式:类继承和接口继承 (2)继承用冒号(:)表示.被继承的叫做父类或者基类,从基类继承的类叫扩充类,又叫派生类或子类.所有类的基类System.Object 声明方式:[访问修饰符]class 扩充类名称:基类名称 { } 若B继承自A,也可以使用强制转换操作将其转换为A对象.如:A b=(A)new B();此时,B对象将被限制为A对象的数据和行为,而无法再访问B对象中的数据和行为,除非A中的方法被B重载,将会访问B的方法.将B强制转换为A后,还可以将A

PHP面向对象的三大特征操作——封装、继承、多态(下)

<?php 继承(单继承)特点:一个子类只有一个父类,一个父类可以有多个子类.//父类(基类)class Ren{    public $name;    public function say(){        echo "问候:";    }    }//子类(派生类)可以继承父类的一切class China extends Ren{    public function say(){        parent::say();        echo "最近怎么

python 面向对象的三大特征之 封装

封装:私有化 class Person(object): def __init__(self): self.__gender = "man" #在类的属性名称前面加__ self.__age = 0 def __add_age(self): #私有的方法 self.__age += 1 def show_gender(self): return self.__gender def get_up(self): print("get_up") self.__add_ag

python面向对象的三大特征--继承

#什么时候用继承 #1.当类之间有显著不同,并且较小的类是较大的类所需的组件时,用组合比较好 #2.当类之间有很多相同的功能,提供这些共同的功能做成基类,用继承比较好 class Dad: "这个是爸爸类" money=10 def __init__(self,name): print("爸爸") self.name=name def hit_son(self): print("%s 正在打儿子" %self.name) class Son(Da

Java面向对象编程三大特征 - 多态

Java面向对象编程三大特征 - 多态 本文关键字:Java.面向对象.三大特征.多态多态是面向对象编程的三大特征之一,是面向对象思想的终极体现之一.在理解多态之前需要先掌握继承.重写.父类引用指向子类对象的相关概念,对继承还没有完全明白的同学可进传送门:Java面向对象编程三大特征 - 继承. 一.抽象类 在继承中,我们已经了解了子父类的关系以及如何对子父类进行设计,如果已经存在多个实体类,再去定义父类其实是不断的抽取公共重合部分的过程,如果有需要将会产生多重继承关系.在抽取整理的过程中,除了

Java面向对象编程三大特征 - 封装

Java面向对象编程三大特征 - 封装 本文关键字:Java.面向对象.三大特征.封装封装是面向对象编程中的三大特征之一,在对封装性进行解释时我们有必要先了解一些面向对象的思想,以及相关的概念.当我们想要去描述一系列的关系时我们要用到的最基本结构就是类,其中存在着成员变量和方法,用于记录属性和表达行为,相关知识请进传送门:Java中的基本操作单元 - 类和对象. 一.名词解读 为了解释封装的概念和作用,需要先来了解一下几个相关的概念,这有助于我们接下来的理解. 1. 权限修饰符 当我们在一个类中