java面向对象的三大特征:封装-继承-多态
什么是面向对象?
Java是一门面向对象的语言,面向对象跟面向过程一样,都是一种思想,面向过程强调的是功能行为,关注的是实现功能所要完成的步骤.然而面向对象强调的是具备功能的对象.关注的是解决问题需要哪些对象.
什么是对象?
万物皆对象,所有的事物都可以看成一个对象.描述现实事物,行为就是事物身上的动词,属性就是事物身上的名词.
java中最基本的单位是类,在类中描述事物
成员方法就是事物的行为,成员对象就是事物的属性.
面向对象的三大特征
封装 继承 多态(抽象)
封装
什么是封装?
广义上:类和方法的体现就是封装的一种
狭义上:private+set/get方法 即隐藏对象的属性和实现细节,提供set,get方法供外界操作.
private仅仅是封装的一种体现形式,不能说封装就是私有
封装的好处:
1.隐藏实现细节,提供公共的访问方式
2.提高代码/数据 安全性
3.提高了代码的复用性
继承
继承就是父子继承
父类又称为基类,超类
继承让类与类之间产生了关系
格式:
class 子类名 extends 父类名{
}
继承的好处:
1.提高了代码的复用性,少写了代码
2.让类与类之间产生了关系,这是多态的前提
继承的弊端:
类的耦合性增强了, 开发的原则: 高内聚低耦合
内聚: 就是自己完成某件事情的能力
耦合: 类与类的关系
继承的特点
1.只能单继承,一个类只能有一个父类,可以有多个子类
2java支持多层继承
多态
定义:某一种事物的多种表现形态
动物 有猫,狗
猫 mao = new 猫();
动物 d = new 猫();
多态的前提:1,父类应用指向子类对象
2,类与类之间存在关系,继承或者实现
3,子类必须对父类的方法进行覆盖(重写)
interface Fu{
void fu();
}
class Zi implements Fu{ //必须是类与类之间有关系 要么继承 要么实现
//子类存在重写
void fu(){
System.out.println("我把fu()方法重写了!");
}
}
class Test{
Fu fu = new Zi();//父类引用 指向 子类对象
fu.fu();
}
多态的好处
提高了程序的扩展性 作用体现在可以当做形参 可以接收任意子类的对象
多态的弊端
但是只能使用父类的引用访问父类中的成员
不能使用子类的特有属性和方法 如果想要使用 必须向下转型
Fu fu = new Zi();
Zi zi = (Zi)fu;
这样就可以用zi.方法调用子类自己特有的方法
对象的向上转型和向下转型
// byte b = 2; int x = b;
//基本数据类型自动提升 体现在了引用数据类型中 向上转型
//强转 向下转型 父类型转成子类型
/*
问:可以这么做么?
Animal a = new Animal();
Cat c = (Cat)a;
错误 不能强行将一个动物转成猫
不能将父类对象 转成子类对象
多态转的是父类引用 指向了自己的子类对象时 该应用可以被提升 也可以被强转
多态至始至终 都是子类对象在做着变化
*/