Java面向对象的三大特征(封装,继承,多态)

目录

文章目录

前言

一、封装

1.封装概述

2.封装原则

3.封装好处

4.封装中两个关键字

4.1private关键字

4.2this关键字

5.代码演示

二、继承

1.继承的概念

2.实现继承的格式

 3.继承的好处和弊端

3.1继承的好处

3.2继承的弊端

4.继承中的成员访问特点

4.1继承中变量的访问特点

4.2继承中成员方法的访问特点

4.3super与this的区别

 5.方法重写

5.1方法重写概念

5.2应用场景

5.3Override注解

 5.4方法重写的注意事项

5.5方法重写与重载的区别

6.继承的注意事项

三、 多态

1.多态的概述

1.1什么是多态

1.2多态的前提

 2.多态的好处和弊端

2.1多态的好处

2.2多态的弊端

3.多态中的成员访问特点

 4多态中的转型

4.1向上转型

4.2向下转型


前言

这是萌新自己总结的关于java面向对象的三大特征,封装,继承,多态。有错误请包涵。

一、封装

1.封装概述

是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的。

2.封装原则

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

成员变量private,提供对应的getXxx()/setXxx()方法。

3.封装好处

通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性。

4.封装中两个关键字

4.1private关键字

因为封装最主要是将类的某些信息隐藏在类内部,不允许外部程序直接访问,所有private关键字是看见封装就要想到的。

private是一个修饰符,可以用来修饰成员(成员变量,成员方法)。

被private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作:

  • 提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰

  • 提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰

4.2this关键字

this修饰的变量用于指代成员变量,其主要作用是(区分局部变量和成员变量的重名问题)

  • 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量

  • 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量

 this代表当前调用方法的引用,哪个对象调用的方法,this就代表哪一个对象

5.代码演示

public class Student {
    //成员变量
    private String name;//用private修饰,外部不能直接访问
    private int age;
    //无参构造方法
    public Student(){

    }
    //有参构造方法
    public Student(String name,int age){//this区分成员变量与形参重名问题
        this.name=name;
        this.age=age;
    }

    //成员方法
    public void setName(String name){//根据提供的get(),set()方法,外部可以访问
        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(getName()+"  "+getAge());
    }
}

//测试类
public class Studentdemo {
    public static void main(String[] args) {
        Student s=new Student();
        s.setName("林青霞");
        s.setAge(30);
        s.show();


        Student s1=new Student("张曼玉",20);
        s1.show();
    }

}

二、继承

1.继承的概念

继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法

2.实现继承的格式

  • 继承通过extends实现

  • 格式:class 子类 extends 父类 { }

class Dog extends Animal { }//狗继承动物

 3.继承的好处和弊端

3.1继承的好处

  • 提高了代码的复用性(多个类相同的成员可以放到同一个类中)

  • 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)

3.2继承的弊端

继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性

4.继承中的成员访问特点

4.1继承中变量的访问特点

在子类方法中访问一个变量,采用的是就近原则。

  1. 子类局部范围找

  2. 子类成员范围找

  3. 父类成员范围找

  4. 如果都没有就报错(不考虑父亲的父亲…)

class Fu {
    int num = 10;
}
class Zi extends Fu{
    int num = 20;
    public void show(){
        int num = 30;
        System.out.println(num);
    }
}
public class Demo1 {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show();	// 输出show方法中的局部变量num=30
    }
}

4.2继承中成员方法的访问特点

通过子类对象访问一个方法

  1. 子类成员范围找

  2. 父类成员范围找

  3. 如果都没有就报错(不考虑父亲的父亲…)

4.3super与this的区别

  • this&super关键字:

    • this:代表本类对象的引用

    • super:代表父类存储空间的标识(可以理解为父类对象引用)

  • this和super的使用分别

    • 成员变量:

      • this.成员变量 - 访问本类成员变量

      • super.成员变量 - 访问父类成员变量

    • 成员方法:

      • this.成员方法 - 访问本类成员方法

      • super.成员方法 - 访问父类成员方法

  • 构造方法:

    • this(…) - 访问本类构造方法

    • super(…) - 访问父类构造方法

 5.方法重写

5.1方法重写概念

子类出现了和父类中一模一样的方法声明(方法名一样,参数列表也必须一样)

5.2应用场景

当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容

5.3Override注解

用来检测当前的方法,是否是重写的方法,起到【校验】的作用

 @Override
    private void show() {
        System.out.println("Zi中show()方法被调用");
    }

 5.4方法重写的注意事项

  1. 私有方法不能被重写(父类私有成员子类是不能继承的)

  2. 子类方法访问权限不能更低(public > 默认 > 私有)

public class Fu {
    private void show() {
        System.out.println("Fu中show()方法被调用");
    }

    void method() {
        System.out.println("Fu中method()方法被调用");
    }
}

public class Zi extends Fu {

    /* 编译【出错】,子类不能重写父类私有的方法*/
    @Override
    private void show() {
        System.out.println("Zi中show()方法被调用");
    }
   
    /* 编译【出错】,子类重写父类方法的时候,访问权限需要大于等于父类 */
    @Override
    private void method() {
        System.out.println("Zi中method()方法被调用");
    }

    /* 编译【通过】,子类重写父类方法的时候,访问权限需要大于等于父类 */
    @Override
    public void method() {
        System.out.println("Zi中method()方法被调用");
    }
}

5.5方法重写与重载的区别

 1.重写:方法名一样,参数列表也必须一样

    重载:方法名一样,多个方法的参数不相同,类型不同或者数量不同

2.位置:重写在继承类或者实现类

              重载在同一个类中

6.继承的注意事项

  1. Java中类只支持单继承,不支持多继承

    • 错误范例:class A extends B, C { }

  2. Java中类支持多层继承

public class Granddad {

    public void drink() {
        System.out.println("爷爷爱喝酒");
    }

}

public class Father extends Granddad {

    public void smoke() {
        System.out.println("爸爸爱抽烟");
    }

}

public class Mother {

    public void dance() {
        System.out.println("妈妈爱跳舞");
    }

}
public class Son extends Father {
	// 此时,Son类中就同时拥有drink方法以及smoke方法
}

三、 多态

1.多态的概述

1.1什么是多态

同一个对象,在不同时刻表现出来的不同形态

1.2多态的前提

    • 要有继承或实现关系

    • 要有方法的重写

    • 要有父类引用指向子类对象

 2.多态的好处和弊端

2.1多态的好处

提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作

2.2多态的弊端

不能使用子类的特有成员

3.多态中的成员访问特点

成员访问特点

  • 成员变量

    编译看父类,运行看父类

  • 成员方法

    编译看父类,运行看子类

//动物类
public class Animal {
    public int age = 40;

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

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

    public void playGame() {
        System.out.println("猫捉迷藏");
    }
}
//测试类
public class AnimalDemo {
    public static void main(String[] args) {
        //有父类引用指向子类对象
        Animal a = new Cat();

        System.out.println(a.age);
//        System.out.println(a.weight);

        a.eat();
//        a.playGame();
    }

 4多态中的转型

4.1向上转型

父类引用指向子类对象就是向上转型

4.2向下转型

格式:子类型 对象名 = (子类型)父类引用;

结合上面代码演示

public class AnimalDemo {
    public static void main(String[] args) {
        //多态
        //向上转型
        Animal a = new Cat();
        a.eat();
//      a.playGame();


        //向下转型
        Cat c = (Cat)a;
        c.eat();
        c.playGame();
    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值