java笔记第七章之封装,继承和多态

本文详细解析封装、继承与多态的概念及应用,通过实例展示封装的保护机制,阐述继承提高代码复用性的原理,以及多态如何实现不同对象间的统一调用。并强调了访问修饰符在类设计中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第七章:封装,继承,多态

@封装

#:什么是封装:用private修饰成员变量就叫做封装,封装通过私有访问符private来实现

#:封装的好处:1.提高内部的安全性 2,可以向外部屏蔽内部组成部分 

#为什么要封装(原来不封装直接访问类的属性,例如MyClass my=new MyClass my.Color这种方法访问,通过封装后要通过get/set间接的访问)

 疑问:不封装任何人都可以操作属性,封装后任何人还可以通过方法操作属性两者没什么区别啊

 答:相当于一个房子,私有物品都封装到房子里只留一个门,这个门就相当于set/get方法,但是我们可以给这哥们加个锁,这样房子里的东西就安全了,类中的属性也是这样的

 ,在get方法中加一些if语句判断,当满足条件是才可以操作属性

#方法也尽可能的使用private

#访问修饰符有:public protected default private 在局部变量中不能使用修饰符

@继承

#作用:提高代码的可重用性

#可重用性:1,父类定义的方法和属性子类自动地继承下来 2,方法:在父类中定义一次那么在子类中到处使用,3,属性集:在弗雷中定义一次,那么在子类中自动调用这些属性集

#继承方法:extends   例如:class A extends B{} A先调用Object中的构造函数,在调用B中的构造函数,最后调用自己的构造函数、

#@ uper, 子类调用父类的构造方法 class A extends B{

public A(){

super();

}

}1,super必须在构造函数中的第一行 2,在其它里面都行

#在构造函数中如果没有显示用super,那么编译器自动地在第一行添加super();

#如果要让调用父类的莫个构造函数,则必须在第一行写上super(参数)

public class MP3player extends Electronics {

private String color;

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

public MP3player(double regularPrice,String manufacturer,String color){

super(regularPrice,manufacturer);

this.color=color;

}

public double computeSalePrice(){

return super.getRegularPrice()*0.9;//这里用到了super显示调用父类的方法,不关本类中有没有重写getRegularPrice这个方法,这里都调用父类的这个方法,此处super可以不用写,不写的话先在本类中找看有没有重写后的这个方法,没有的话隐式的调用父类的这个方法

}

#覆盖:1,方法名相同 2,参数相同2,不同类 作用:如果父类的莫种行为和子类不一致,我们可以用覆盖来改变

 覆盖时要注意:子类的访问级别一定要小于父类,异常一定要小于父类;

 覆盖和重写一样 重载是方法名相同但参数不同

@多态

#在不同上下文有不同行为(一定要存在父子关系,才能多态)

1),public class A{

public void call(){}

}

class D extends A{

public void call(){

}

}

publc static void main(String args[]){

A a=new D();

a.call();//看见一个动物是dog 它就按dog的方式叫

}

2),public class Dog{

public void testp(Animal animal){

animal.eat()

}

}

public static void main(String args[]){

Dog dog=new Dog();

dog.testp(dog);

dog.testp(new cat);

}

#,多态的实现;

1,通过抽象方法来实现多态//一定要调用子类的方法

2,通过方法的重载实现多态//不一定调用子类的方法,如果没有覆盖父类的方法的话就调用父类方法

3,通过接口实现多态

#.多态调高了代码的通用性

1Dog dog=new Dog();

         dog.sleep();

 d.eat();

  (2) Animal a=new Dog();//如果动物变成了猫而(1)中下面的代码都需要改,而(2)中用了多态这下面的a.sleep().就不需要该

a.sleep();

a.eat();

#.java中的访问修饰符

修饰符|  访问范围       |      是否被子类继承

private  本类范围   不能

default  |本类内部+ | 能被同包的子类继承

  同包的其他类

protected |本类内部+同包的其他类+   | 能被继承

 非同包的子类

public  |公开,能被所有类访问   | 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值