面向对象三大特征之一 ——封装
封装的概念:
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
把尽可能多的东西藏起来,对外提供便捷的接口
简而言之:把所有属性都隐藏起来
为什么要封装?![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5a6d2687d89414a6e1777ad97ce9ba38.png)
封装的好处:
如何封装:
面向对象三大特征之一 ——继承
继承的概念:
继承是面向对象三大特征之一。可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。
将重复代码抽取到父类中:
示例:
将两个类中的相同属性提取到同一个类中,使他们产生某种关系,这就是继承:
继承的格式:
示例:
继承是Java中实现代码重用的重要手段之一。Java中只支持单根继承,即一个类只能有一个直接父类
继承的优点与缺点:
继承中的关键字:
this关键字:
可以看到一半 自动生成的 get
和set
方法中存在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("动物要吃饭");
}
}
测试类:
可以看到编译未通过
可以看到变量访问的是父类中的年龄
小结:
多态的好处和弊端:
多态的转型:
向上转型:
向下转型:
例如子类中有自己的方法,多态不能调用子类的特有方法,这时候可以用到向下转型:
这时就可以使用子类特有的方法