面向对象的三大特性:
封装,继承,多态
继承是面向对象的重要概念,软件中得继承和现实中得继承概念一样
继承是实现软件可重用性的重要手段(A继承B,A就拥有了B得所有特性)
java中支持类的单继承,也就是说A只能继承B,A不能同时继承C
java中继承使用extends关键字
1.
封装性
①、什么是封装?
封装就是将属性私有化,提供公有的方法访问私有属性。
做法就是:修改属性的可见性来限制对属性的访问,并为每个属性创建一对取值(
getter
)方法和赋值(
setter
)方法,用于对这些属性的访问。
如:private String name;
public String getName(){
return;
}
public void setName(String name){
this.name=name;
}
②.
为什么需要封装?
通过封装,可以实现对属性的数据访问限制,同时增加了程序的可维护性。
由于取值方法和赋值方法隐藏了实现的变更,因此并不会影响读取或修改该属性的类,避免了大规模的修改,程序的可维护性增强。
3、. this关键字是什么意思?
有时一个方法需要引用调用它的对象。为此,java定义了this这个关键字。简单地说,
This是在对象内部指代自身的引用。可以直接引用对象,可以解决实例变量和局部变量之间发生的任何同名的冲突。
4、. 如何实现封装,实现封装的具体方法?
(1)、修改属性的可见性来限制对属性的访问。
(2)、为每个属性创建一对赋值方法和取值方法,用于对这些属性的访问。
(3)、在赋值和取值方法中,加入对属性的存取的限制。
、什么是构造方法?构造方法的语法规则?
构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值。
构造方法的语法规则:方法名与类名相同。没有返回类型。
使用new关键字实例化对象的过程实际上就是调用构造方法的过程。或者说实例化一个对象实际上就是去调用这个对象的构造方法。
Xin xin=new Xin();
在实例化对象的时候,已经实例变量赋予了初始值,完成了对象的初始化工作。
6、 .为什么需要构造方法?
为属性赋值时,很容易忘记对其中的一项或多项进行赋值。构造方法可以简化对象初始化,为实例变量赋值。
7、 带参数的构造方法:可以显示地为实例变量赋予初始值。在不同的条件下创建不同的对象,这些对象的实例变量具有不同的值。
注意:在使用带参数的构造方法实例化对象时,传递的值和构造方法的参数应当在个数、次序和数据类型上相互配备。
通过调用带参数的构造方法,在创建对象时,一并完成了对象的初始化工作,简化了对象初始化的代码。
构造方法重载是方法重载的一个典型的特例。参数列表不同。
可以通过重载构造方法来表达对象的各种多种初始化行为。也就是说在通过new语句创建一个对象时,可以实现在不同的条件下,让不同的对象具有不同的初始化行为。
Private String name;
Private String sex;
Public Xin(String name){
this.name=name;
}
Public Xin(String name,String sex){
this.name=name;
this.sex=sex;
}
--------------------------------------------
1.class 父类{}
class 子类 extends 父类{}
在JAVA中允许多层继承,而不能多重继承,即一个子类只能继承一个父类,但是允许进行多层继承,即一个子类可以有一个父类,一个父类还以有一个父类。
多层继承范例:
Class A{ }
Class B extends A{ }
Class C extends B{ }
子类是不能直接访问父类的私有成员,子类可以调用父类的非私有成员方法,但不能直接调用父类中的私有成员。
2.子类对象在实例化之前必须首先调用父类中的构造方法后在调用子类自己的构造方法。
------------------------------------------------------------------------------------------------------
3.多态
多态:方法的多态(重载和覆写),对象的多态
在开发中重点的设计应该放在父类上,只要父类设计的足够合理,则开发肯定会非常的方便,而且在类的设计中,永远不要去继承一个已经实现好的类,只能继承抽象类或实现接口,因为一旦发生对象的向上转型关系后,所调用的方法一定是被子类所覆写过的方法。
1多态:可以理解为事物存在的多种体现形态
动物:猫,狗
猫 x=new 猫();(对象与对象之间) 动物 x=new 猫();
2.多态的体现 :父类的引用指向了自己的子类对象
父类的引用也可以接受自己子类对象
3.多态的前提:
有继承或实现,有方法覆盖或实现,父类对象(接口)指向子类对象
注:无论是向上转型还是向下转型,两个类之间必须要有继承关系
4.多态的好处:
1⃣️ 多态的出现大大的提高程序的扩展性(项目的拓展能力增强)
2⃣️ 使用多多态可以使代码之间的耦合度降低
弊端:提高了扩展性,但只能使用父类的引用访问父类中的成员。
5.多态的应用:多态自始自终都是子类对象在做着变化
对象的多态性
(1)方法的重载和覆写
(2)对象的多态性
对象的多态性主要分为2种类型:
(1)向上转型:子类对象——>父类对象(调用方法一定是被子类覆写过的方法)
(2)向下转型:父类对象---->子类对象(
在进行对象的向下转型之前,必须首先发生对象向上转型,否则将会出现异常)
A a=new B( ); ====== A a=null; a=new B( );
//发生向上转型,
子类--->父类
B b=(B) a; //此时发生向下转型
推荐:做向下转型时候需要使用到instanceof 运算符判断,避免ClassCastException
6.在JAVA中可以使用instanceof关键字判断一个对象到底是那个类的实例,
格式:
对象 instanceof 类 ->返回boolean类型(true/false)
if
(
a4
instanceof
Dog) {
System.out.println("为真");
Dog
c3
= (Dog)
a4
;
}
7.接口和抽象类的区别
a.接口描述了方法的特征,不给出实现,一方面解决java的单继承问题,实现了强大的可接插性
b.抽象类提供了部分实现,抽象类不能实例化,抽象类的存在主要是可以把公共的代码移植到抽象类中
c.面向接口编程,而不要面向具体编程(面向抽象编程,而不要具体编程)
d.优先选择接口(因为继承抽象类后,此类将无法再继承,所以会丧失此类的灵活性)