Java学习之路---面向对象(三大特征——封装,继承,多态)

本文深入探讨了面向对象编程的三大特性:封装、继承和多态。封装强调隐藏类的内部细节,提供公共接口访问;继承允许子类继承父类属性和方法,实现代码重用;多态则表现为同种事物在不同条件下表现出不同行为。通过实例解析了构造方法的调用顺序、方法重写规则以及多态下成员访问的特点。
摘要由CSDN通过智能技术生成

面向对象三大特征之一 ——封装

封装的概念:

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
把尽可能多的东西藏起来,对外提供便捷的接口

简而言之:把所有属性都隐藏起来

为什么要封装?在这里插入图片描述

封装的好处:

在这里插入图片描述

如何封装:

在这里插入图片描述

面向对象三大特征之一 ——继承

继承的概念:

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

将重复代码抽取到父类中:
示例:
在这里插入图片描述
将两个类中的相同属性提取到同一个类中,使他们产生某种关系,这就是继承:
在这里插入图片描述

继承的格式:

在这里插入图片描述
示例:
在这里插入图片描述
继承是Java中实现代码重用的重要手段之一。Java中只支持单根继承,即一个类只能有一个直接父类

继承的优点与缺点:

继承的优点与缺点

继承中的关键字:

this关键字:

可以看到一半 自动生成的 getset方法中存在this关键字,这个关键字一般指的是成员变量。
在这里插入图片描述

super:

子类访问父类的方法和属性时可以使用super
(1)使用super关键字,super代表父类对象
(2)在子类构造方法中调用且必须是第一句
(3)不可以访问父类中定义为private的属性和方法

访问父类构造方法
super();    
super(name);
访问父类属性
super.name;
访问父类方法
super.print();
小结:

在这里插入图片描述

this和super的区别:

在这里插入图片描述

继承中构造方法的访问:

在main函数中访问子类的方法是,会先访问父类的无参构造方法
示例:
子类

public class Zi extends Fu {

    public  Zi(){
//        super();
        System.out.println("Zi无参方法被调用");
    }

    public Zi(int age){
        System.out.println("Zi有参方法被调用");
    }
}

父类:

public class Fu {
    public Fu(){
        System.out.println("Fu无参方法被调用");
    }
    public Fu(int age){
        System.out.println("Fu有参方法被调用");
    }
}

测试类:

public class demo {
    public static void main(String[] args) {
       Zi z=new Zi();

    }
}

在这里插入图片描述
所以在继承父类时要尽量完成父类无参方法的初始化否则会报错。
可以使用super修改调用的方法:
public class Zi extends Fu {

    public  Zi(){
//        super();
        System.out.println("Zi无参方法被调用");
    }

    public Zi(int age){
        super(15);
        System.out.println("Zi有参方法被调用");
    }
}

再次运行主函数时看到控制台成功修改父类调用的方法:
在这里插入图片描述

在这里插入图片描述

方法重写:

什么是方法重写:

在这里插入图片描述

方法重写的规则:

在这里插入图片描述

方法重写和方法重载的区别:

在这里插入图片描述

面向对象三大特征之一 ——多态

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

多态的概述:

在这里插入图片描述

多态中成员访问特点:

示例:
猫类:

package test;

public class Cat extends Animals {
	int age=20;
	@Override
	public void eat() {
		System.out.println("猫吃鱼");
	}

	public void play() {	
		System.out.println("猫玩球");
	}
}

动物类:

package test;

public class Animals {
	int age=30;
	public void eat() {
		System.out.println("动物要吃饭");
	}
}

测试类:
可以看到编译未通过
在这里插入图片描述
可以看到变量访问的是父类中的年龄
在这里插入图片描述

小结:

在这里插入图片描述

多态的好处和弊端:

在这里插入图片描述

多态的转型:

在这里插入图片描述

向上转型:

在这里插入图片描述

向下转型:

例如子类中有自己的方法,多态不能调用子类的特有方法,这时候可以用到向下转型:
在这里插入图片描述
这时就可以使用子类特有的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛总来学习了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值