类:类是一组属性和行为的集合,也可以看成是一类事物的模板。使用事物的属性和行为来描述该事物。
属性:有什么样的状态,大小、年龄、颜色、体重。
行为:能够干什么,唱歌、跳舞,走。
对象:对象是一类事物具体的体现,对象是类的一个实例。必然具备该类事物的属性和行为。
类和对象的关系:
类是一类事物的描述,是抽象的。
对象是类的实例,是具体的。
类的定义和使用:
类由属性和行为构成,在类中,属性通过成员变量来体现,行为通过成员方法来体现。
类的定义格式
public class className{
//成员变量
//成员方法
}
创建对象格式:
类名 对象名 =new 类名();
访问类中的成员:
对象名.成员变量
对象名.成员方法
成员变量和局部变量的不同:
1.位置不同,成员变量在类中方法外,局部变量在方法声明中和方法体内。
2.存储位置不同:成员变量存放在堆,局部变量存放在栈生命内。
3.作用方位不同:成员变量作用在整个类中,局部变量作用在方法体内,
4.初始化值不同:成员变量具有初始值,局部变量没有初始值,必须赋初值。
5.生命周期不同:成员变量随着对象的创建而创建,对象的消亡而消亡。
局部变量随着方法的调用而产生,方法的消亡而消亡。
封装
面向对象编程语言是对客观世界的模拟,客观世界的成员变量都是隐藏在事物的内部的,外界无法操作和修改,封装可以认为是一种保护屏障。防止该类的代码和数据被其他类随意访问,要访问该类,必须通过指的方式,适当的封装可以使代码更容易理解和维护。
private:私有的,可以用来修饰成员变量和方法,权限修饰符,代表最小权限。被private修饰的成员变量和方法,只能在本类中使用。
封装的思想:隐藏对象的属性和实现细节,仅对外提供公共的访问方式 。
如何实现封装:使用private修饰成员变量,提供一对setXXX,getXXX方法。
this关键字
当形式参数和成员变量重名时,会赋值失败,因此只能使用this关键字,来解决重名问题。
this代表当前对象的引用,即对象自己的引用。方法被那个对象调用,方法中的this就代表那个对象,即谁在调用this就代表谁,使用this关键字可以调用本类中的属性。
使用格式:this.属性名。
构造方法
构造方法:当一个对象被调用时,构造方法用来初始化该对象,给对象的成员变量赋初值。
无论是否定义构造方法系统都会提供一个无参构造,当自定义构造方法时,系统定义的构造方法会失效。
定义格式:
修饰符 类名(参数列表){
//方法体
}
注意:
方法名与类名相同,不能有任何返回值类型的声明,不能使用return返回任何值,但是可以作为结束,构造方法可以被重载。
标准Javabean的编写
Javabean是Java语言编写类的一种规范,符合Javabean的类要求必须具有无参构造方法、提供操作属性的set、get方法,类是具体的和公共的。
public class ClassName{
//成员变量
//有参构造
//无参构造
//set方法
//get方法
}
继承
多个类之间存在相同的属性和行为,将这些单独存放在一个类中,其他类不需要再去重新定义只需要继承这个类即可。
其中多个类称为子类,单独的一个类称为父类,超类或基类。
继承的特点:
子类继承父类非私有的属性和方法,子类也可以拥有自己的属性和行为。
好处:提高代码的复用性,类与类之间的关系是产生多态的前提。
格式:
//通过extends关键字
class ChildClass
class ChildClass extends FatherClass{......}
继承中成员变量访问的特点:
当成员变量不重名时。子类可以正常访问父类成员变量。
当成员变量重名时,子类根据就近原则优先访问本类中的成员变量
当子类中出现了和父类中重名的成员变量,当需要访问父类中的非私有的成员变量时,使用super关键字。格式如下
super.成员变量名
注意:当父类中的成员变量时非私有的时候,我们可以直接访问。当父类中的成员变量是私有的时候,子类不能直接来使用,我们一般根据封装的原则将属性私有化,此时如果要访问父类中的成员变量需要在父类中提供set 和get方法。
继承中成员方法访问的特点:
1.成员方法不重名:当成员方法不重名时,子类可以正常调用父类中的成员方法。
2.成员方法重名时:子类会优先调用自己的成员方法,并对父类的成员方法构成重写(override)。
方法重写 :当子类的方法与父类的、方法名、返回值、参数列表、都相同时,会出现覆盖效果,也称为重写或复写。
方法复写的应用场景:当子类继承了父类的功能名称,又根据子类的需要重新实现父类方法,从而实现功能扩展。
例子:新的手机要增加显示头像的功能。
//父类
public void showNum(){
sout("显示号码");
}
//子类
public void showNum(){
sout("显示号码");
sout("显示头像");
}
note:子类重写父类方法:方法名,返回值类型,参数列表都要一模一样。
super.成员变量名
//父类中的成员变量
super.成员方法名
//父类中的成员方法
构造方法的执行特点:
1.构造方法与类名相同,所以子类无法继承父类的构造方法。
2.构造方法的作用是初始化成员变量的,所以在子类的初始化过程中,必须先执行父类的初始化动作,父类成员初始化后,才可以给子类使用。
note:子类的构造方法中第一行默认有super,给父类进行初始化的,在子类的构造方法中可以手动调用其他重载的构造方法。
格式:super.(参数列表);
super方法写在构造方法的第一行。
super和this
super:代表父类空间的引用代表父类对象
this:代表当前空间的引用,谁用代表谁。
this.成员变量:本类
this.成员方法:本类
super.成员变量:父类
super.成员方法:父类
this(…):本类构造方法
super(…)父类构造方法
继承的特点:
Java支持单继承,不支持多继承。一个父类可以有多个子类,单一个子类只能有一个父类。
Java支持多重继承,即A继承B,C继承A,这样就构成多重继承。
public class A extends B{}
public class C extends A{}