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

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

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

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

目录

一、封装性

1、封装与隐藏

2、体现

3、四种权限修饰符

4、代码举例

二、继承性

1、概念

2、为什么要有继承

3、使用规则

4、重写

4、代码举例

三、多态性

 1、什么是多态性

2、虚拟方法

3、前提

4、多态是“晚绑定”,是运行时行为

5、使用

 6、代码例子


一、封装性

1、封装与隐藏

属性和功能封装起来,不允许外部干扰,当要使用那些功能或属性时,提供相应的接口

2、体现

(1)将类的属性私有化(private),提供get和set方法来调用,完成相应设置和获取的操作

(2)私有方法

(3)单例设计模式,将构造器私有化

(4)缺省的类,无法被包外使用。

3、四种权限修饰符

4、代码举例
package com.p4;


public class Person {
    private String name;//名字
    private int age;//年龄
    private  boolean gender;//性别,ture为男性,false为女性
    //无参构造器
    public Person(){

    }
    //有参构造器,与上面无参的形成重载。
    public Person(String name,int age,boolean gender){
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    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 boolean isGender() {
        return gender;
    }

    public void setGender(boolean gender) {
        this.gender = gender;
    }
}

使用private对其属性、方法进行封装,私有化,外部要使用时,需要通过get、set方法,或者调用其他public方法,而这些方法中,要使用到私有属性或私有方法,才能达到效果。

二、继承性

1、概念

通过extends关键字,把两个类关联起来,如类A extends 类B,那么称类A是子类,类B是父类,子类中拥有着父类的属性、方法,如果父类的属性、方法,子类不能直接调用,但它们依然存在于子类中,子类可以拥有直接的属性和方法。

2、为什么要有继承

  (1)减少代码冗余

程序中,有些内容的属性和方法被重复出现,则使得代码冗余,为此,提供继承,把这些重复的属性、方法包装成父类,又子类去继承,从而省去了重新书写的麻烦,减少了代码的冗余。

(2)增加扩展性

当想要对程序进行扩展时,只需要对父类进行操作即可,子类也会跟着继承,增加了程序的扩展性,利于功能的扩展。

(3)联系了类与类,为多态性做前提

3、使用规则

        (1)格式calss A extends calss B

        (2)一个类可以被多个类继承,但,一个类只能拥有一个直接父类,父类的父类称之为间接父类,也就是多层继承,不过父类的父类也只能有一个。

        (3)当没有显式继承时,类默认继承类:java.lang.Object类,该类是根父类,所有的类的直接或间接的父类。

4、重写

        (1)当子父类当中,拥有同名同参数列的方法时,子类的对象会默认调用子类中的这个同名方法,这被称之为重写方法

        (2)一般规则

           

4、代码举例

        父类:Person

package com.p4;


public class Person {
    private String name;//名字
    private int age;//年龄
    private  boolean gender;//性别,ture为男性,false为女性
    //无参构造器
    public Person(){

    }
    //有参构造器,与上面无参的形成重载。
    public Person(String name,int age,boolean gender){
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    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 boolean isGender() {
        return gender;
    }

    public void setGender(boolean gender) {
        this.gender = gender;
    }
}

      子类Student

        

package com.p4;


public class Student extends Person{
    private double score;//成绩

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public void study(){
        System.out.println("学习!");
        
    }
}

      Test测试类

package com.p4;


public class Test {
    public static void main(String[] args) {
        //实例化Student
        Student student = new Student();
        student.setName("稀晨");
        student.setAge(99);
        student.setGender(false);
        student.setScore(900);
        System.out.println("名字:"+student.getName()+"  "+"年龄:"+student.getAge()+"  "
                +"性别:"+student.isGender()+"  "+"成绩:"+student.getScore());

    }
}

   运行结果

 子类中并没有声明name、age、gender,却可以调用,声明该类继承了Person类。

三、多态性

 1、什么是多态性

一件事物具有多种形态,例如动物这个类别,它拥有猫、狗等的形态,这些猫、狗,是动物类的子类,它们都可以说是动物,但却是动物中不同的形态,动物可以是猫,也可以是狗。

即是父类的引用,指向子类的对象。

提高了代码的通用性。

2、虚拟方法

在多态情况下,子类与父类的同名同参数方法,即重写方法。

父类此时的该方为虚拟方法,实际调用的情况,要看是父类

被赋值的是哪一个子类,实际调用的就是子类的重写方法。

3、前提

需要有重写方法,有继承关系。

4、多态是“晚绑定”,是运行时行为

编译时调用的方法是左边的父类引用,当实际运行时,却调用的是子类重写的方法,即与父类同名同参数的方法。

5、使用

子父类的属性没有多态性,即使子父类的属性同名同数据类型,子类的属性也无法覆盖父类的属性。

格式:父类类型  变量名 = new  子类();

子类向父类转型,自动转型:多态。

父类向子类转型,需要强制类型转换,使用instanceof进行判断,才能转型成功。

a instanceof A ,判断,a 是A类的实例。若是,两者才能转型。

子类类型  变量名 = (子类)父类变量名;  

 传型成功。

 

转型失败

 6、代码例子

Person类

package com.p4;


public class Person {
    private String name;//名字
    private int age;//年龄
    private  boolean gender;//性别,ture为男性,false为女性
    //无参构造器
    public Person(){

    }
    //有参构造器,与上面无参的形成重载。
    public Person(String name,int age,boolean gender){
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    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 boolean isGender() {
        return gender;
    }

    public void setGender(boolean gender) {
        this.gender = gender;
    }
    //吃饭
    public void eat(){
        System.out.println("人吃饭");
    }
}
Teacher类
package com.p4;


public class Teacher extends Person {
    private double salary;//工资
    public Teacher(String name,int age,boolean gender,double salary){
        super(name,age,gender);
        this.salary = salary;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
    public void eat(){
        System.out.println("老师吃饭");
    }
}
Student 类
package com.p4;


public class Student extends Person{
    private double score;//成绩

    public Student(String name,int age,boolean gender,double score){
        super(name,age,gender);
        this.score = score;
    }
    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public void study(){
        System.out.println("学习!");

    }
    public void eat(){
        System.out.println("学生吃饭");
    }
}

Test测试类

package com.p4;


public class Test {
    public static void main(String[] args) {

        Person person = new Person("张三",99,true);
      //父类的引用指向子类
        Person person1 = new Student("稀晨",99,true,999);
        Person person2 = new Teacher("老六",100,false,29999);

        //调用eat方法。
        person.eat();
        person1.eat();
        person2.eat();



    }
}

运行结果

 老师类和学生类都重写了eat()这个方法,当Person的引用指向子类的对象时,运行时,调用的子类的重写方法。

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

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

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