第七章:封装,继承,多态
@封装
#:什么是封装:用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,通过接口实现多态
#.多态调高了代码的通用性
(1)Dog 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 |公开,能被所有类访问 | 能