1.设计对象并使用
①类和对象
- 类:是共同特征的描述(设计图)。
-
②设计类
public void 类名{
1.成员变量(代表属性的,一般是名词)
2.成员方法(代表行为的,一般是动词)
}③创建对象
④访问信息
对象.成员变量;
- 对象.成员方法(…);
⑤注意事项
- 类名首字母建议大写,满足“驼峰模式”,不能用关键字,必须是合法标识符,且有意义。
- 一个java文件中可以有多个class类,但只能一个类是public修饰,而且public修饰符的类名必须成为代码文件名。(实际开发还是建议一个代码文件只定义一个类)
- 成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值; 一般无需指定初始化值,存在默认值。
2.对象在内存中的运行机制
①多个对象的内存图
-
①格式:修饰符 类名(形参列表){……}
public class Car{
……
//无参构造器
public Car(){
……
}
//有参构造器
public Car(String n,double p){
……
}
……
}
②调用构造器得到对象的格式
**类 变量名称 = new 构造器;**``**Car c = new Car( );**``** Car c1 = new Car( "奔驰","39.8");**
③构造器的分类和作用
无参构造器(默认存在的):初始化对象时,成员变量的数据均采用默认值。
- 有参构造器:在初始化对象的时候,同时可以接收参数为对象进行赋值。
④注意事项
-
4.封装
①封装的概念
封装:告诉我们,如何正确设计对象的属性和方法。
封装的原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为。
②如何进行封装
一般建议对成员变量使用private(私有、隐藏)关键字修饰(private修饰的成员只能在当前类中访问)。
为每个成员变量提供配套public修饰的getter、setter的方法暴露其取值和赋值。
5.继承
①继承概述、作用和好处
Java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起父子关系。
** public class Student extends People {}**
- Student称为子类(派生类),People 、称为父类(基类或超类)。
作用:当子类继承父类后,就可以直接使用父类公共的属性和方法了。
好处:提高代码复用性.
②继承的设计规范
- 子类们相同特征(共有属性,共有方法)放在父类中定义,子类独有的属性和行为应该定义在子类自己里面。
- 如果子类的独有属性,定义在父类中,会导致其他子类中也会继承这些属性和行为,这不符合面向对象的逻辑。
③继承的特点
- 子类可以继承父类中所有属性和行为,但是子类不能继承父类的构造器。
- Java是单继承模式:一个类只能继承一个直接父类。
- Java不支持多继承,但是支持多层继承。
- Java中所有的类都是Object类中的子类。
④方法重写·
- 在继承体系中,子类出现了和父类中一摸一样的方法声明,我们称子类这个方法是重写的方法。
**@Override 重写注解**
- @Override是放在重写后的方法上,作为重写是否正确的校验注解。
- 加上改注解后如果重写错误,编译阶段会出现错误提示。
- 代码安全,可读性高。
方法重写注意事项
- 重写方法的的名称、形参列表必须与被重写方法的名称和参数列表一致。
- 私有方法不能被重写。
- 子类重写父类方法时,访问权限必须大于或等于父类(缺省<protected<public)
- 子类不能重写父类的静态方法,如果重写会报错。
⑤子类构造器的特点
子类中所有的构造器默认都会先访问父类中无参的构造器,再执行自己。
关键字 | 访问成员变量 | 访问成员方法 | 访问构造方法 |
---|---|---|---|
this | this.成员变量 访问本类成员变量 |
this.成员方法(…) 访问本类成员方法 |
this(…) 访问本类构造器 |
super | super.成员变量 访问父类成员变量 |
super.成员方法(…) 访问父类成员方法 |
super(…) 访问父类构造器 |
注意:this(…)和super(…)都需要放在第一行,所以不能同时存在。
6.多态
- 同类型的对象,执行同一个行为,会表现出不同的行为特征。
-
1.多态形式
父类类型 对象名称 = new 子类构造器;
接口 对象名称 = new 实现类构造器;2.多态中成员访问特点
方法调用:编译看左边,运行看右边。
-
3.多态的前提
4.优势
在多态形式下,右边对象可以实现解耦合,便于扩展和维护。
定义方法的时候,使用父类型作为参数,该方法就可以接收这父类的一切子类对象,体现出多态的扩展性与便利。
5.类型转换
1.自动类型转换(从子到父):子类对象赋值给父类类型的变量指向。
2.强制类型转换吗(从父到子)此时必须进行强制类型转换:子类 对象变量 = (子类)父类类型的变量
- 作用:可以解决多态下的劣势,可以实现调用子类独有的功能。
- 注意: 如果转型后的类型和对象真实类型不是同一种类型,那么在转换的时候就会出现ClassCastException
3.Java建议强转转换前使用instanceof判断当前对象的真实类型,再进行强制转换
变量名 instanceof 真实类型
判断关键字左边的变量指向的对象的真实类型,是否是右边的类型或者是其子类类型,是则返回true,反之返回false。
7.JavaBean
- 也可以称为实体类,其对象可以用于在程序中封装数据。
标准JavaBean须满足如下书写要求
- 成员变量使用private修饰。
- 提供成员变量对应的setXxx() / getXxx()方法。
- 必须提供一个无参数构造器;有参数构造器可写可不写。 | 区别 | 成员变量 | 局部变量 | | —- | —- | —- | | 类中位置不同 | 类中、方法外 | 常见于方法中 | | 初始化值不同 | 有默认值,无需初始化 | 没有默认值,使用之前需要完成赋值 | | 内存位置不同 | 堆内存 | 栈内存 | | 生命周期不同 | 随着对象的创建而消失,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的运行结果而消失 | | 作用域 | | 在所归属的大括号中 |