三大特性
封装
什么是封装
将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现隐藏信息的操作和访问。
为什么要使用封装
为了保证数据安全和规范,将类的属性设置为私有属性,提供共有的外部方法供程序进行调用。
封装的作用与意义
- 提高代码的安全性
- 提高代码的复用性
- “高内聚”’,封装细节,便于修改内部代码,提高程序的可维护性
- “低耦合”,简化尾部调用,便于调用者使用,便于拓展和写作
代码示例
class Demo{
private String salary;//外部无法通过new出来的对象直接对象.属性进行访问而必须通过Setter和Getter方法进行操作
public Demo(){}
//修改器
public void setSalary(double salary){
this.salary = salary;
}
public double getSalary(){
return salary;
}
}
继承
什么是继承
子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承的作用和意义
- 使得子类具有父类的非私有属性和方法,同时子类在子类中重新定义
- 可以提高代码的复用性
- 继承为多态提供了前提
- 注意:Java只允许单继承,但可以是多层次继承。
多态
什么是多态
父类的引用指向子类的对象,从而产生的多种形态
存在条件
- 继承
- 方法的重写
- 父类的引用指向子类对象
分类
- 编译期多态(重载)
- 运行时多态(重写)
多态的意义和作用
- 在程序运行过程中体现的动态的特性
- 函数重写必须多态实现,否则没有意义
- 多态是面向对象组件化程序设计的计基础
代码实例
import javax.xml.catalog.Catalog;
public class DuotaiTest {
public static void main(String[] args){
//func(new Animal());
//Error:(3, 9) java: 无法从静态上下文中引用非静态 方法 func(Animal)
DuotaiTest t=new DuotaiTest();
t.func(new Animal());
System.out.println("------");
t.func(new Dog());
System.out.println("---------");
t.func(new Cat());
}
public void func(Animal a){//Animal a=new Dog();
a.eat();
a.jump();
if(a instanceof Dog){
Dog d=(Dog) a;
//((Dog) a).wang();
d.wang();
}
if(a instanceof Cat){
Cat c=(Cat) a;
c.catchMouse();
}
if(a instanceof Animal){
System.out.println("大家都是动物");
}
}
public void show(){
func(new Animal());
}
}
class Animal{
String name;
int age;
public void eat(){
System.out.println("动物找吃的");
}
public void jump(){
System.out.println("动物跳跳糖");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("狗吃骨头");
}
public void jump(){
System.out.println("狗急跳墙");
}
public void wang(){
System.out.println("小狗汪汪叫");
}
}
class Cat extends Animal{
public void eat(){
System.out.println("猫吃鱼");
}
public void jump(){
System.out.println("小猫爬墙");
}
public void catchMouse(){
System.out.println("小猫喵喵叫");
}
}
结果:
动物找吃的
动物跳跳糖
大家都是动物
------
狗吃骨头
狗急跳墙
小狗汪汪叫
大家都是动物
---------
猫吃鱼
小猫爬墙
小猫喵喵叫
大家都是动物