面向对象
定义类
类是由字段和方法两部分构成的.
面向对象设计的过程就是抽象的过程,也是设计类的过程,一般分为三步完成。
-
发现类,类定义了对象将会拥有的特性(字段)和行为(方法)。
-
发现类的字段,对象所拥有的特性在类中的表示称为类的字段。
-
发现类的方法,对象执行的操作称为类的方法。
定义类的语法格式如下
public class Student { // 类的字段声明 // 类的方法声明 }
类的字段
定义字段的语法格式如下:
[访问修饰符] 数据类型 字段名;
语法解析
(1) 访问修饰符是可选的。
(2) 除了访问修饰符外,其他部分与定义变量相同。
创建对象
创建对象的语法格式如下:
Student stu = new Student();
语法解析:
(1) new是关键字,称为实例化。
(2) 左边的类名为对象的数据类型。
(3) 右边的类名( )称为类的构造方法。
成员变量
成员变量的作用域
public class Person{
private String name;
priavte int age;
}
这两个变量就是成员变量。它们的作用域在整个Person类中。
局部变量的作用域
局部变量就是定义在方法内部的变量。work( )方法中的变量就是局部变量,局部变量只能在方法内部使用。
这个money()就是方法,里面的int age=10就是局部变量。
public class Person{
private String name;
priavte int age;
public void money(){
int age=10;
}
}
成员变量与局部变量的区别
- 作用域不同。局部变量的作用域仅限定于定义它的方法,在该方法外无法被访问。成员变量的作用域是在整个类内,所有的成员方法都可以使用它。如果访问权限允许,还可以在类外部使用成员变量。
- 初始值不同。对于成员变量,如果在类定义中没有给它赋予初始值,Java会给它赋一个默认值,byte、short、int、long类型的默认值是0,boolean类型的默认值是false,char类型的默认值是’\u0000’(空字符),float、double类型的默认值是0.0,引用类型的默认值是null。但是java不会给局部变量赋初始值,因此局部变量在使用前必须初始化。
类和对象的一些注意事项
注
一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须是代码文件名。
对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会受影响了。
如果某个对象没有一个变量引用它,则该对象无法操作了,该对象会成为所谓的垃圾对象。
构造器
1.什么是构造器?
构造器其实是一种特殊的方法,但是这个方法没有返回值类型,方法名和类名必须保持一致。
public class Cat {
private String color;
private String breed;
public Cat() {//无参构造
}
public Cat(String color, String breed) {//有参构造
this.color = color;
this.breed = breed;
}
}
2.构造器什么时候执行?
new对象就是执行构造方法。
3.构造方法的应用场景是什么?
在创建对象时,可以用构造方法给成员变量赋值。
4.构造方法有哪些注意事项?
(1)在设计一个类时,如果不写构造器,Java会自动生成一个无参数构造器。
(2)一定定义了有参数构造器,Java就不再提供空参数构造器,此时建议自己加一个
无参数构造器。
this关键字
- 区别成员变量和局部变量。
- 调用成员方法,(哪一个对象调用方法方法中的this就是哪一个对象)。
- 调用构造方法的重载方法,只能在构造方法中使用,并且只能在第一句。
static关键字
静态变量属于类,各个对象共享。
实例变量属于方法,只有在方法内部使用,每个对象私有。
静态变量只能被静态变量访问,实例变量既可以访问实例变量,也可以访问静态变量。
静态变量可以类名.属性名,方法名.属性名调用。
实例变量之只能通过方法名.属性名的方法获取。
静态变量在类加载的时候初始化,实例变量在创建对象的时候初始化。
静态成员不能使用this,实例成员可以使用this。
三大特性(继承,封装,多态)
封装:
通过访问修饰控制成员变量和成员方法的访问权限,对外提供访问方式(合理隐藏,合理暴露)。
访问修饰符:3个4种
- public :任何地方都可以访问
- protected :同包或不同包子类可以访问
- private :只能在本类中才可以访问
- package-access:同包任意类
继承:
子类对父类扩展,子类可以继承父类的属性和方法,从而实现代码的复用,并且可以添加自己的属性和方法,或重写父类的方法,实现对父类的扩展,在Java中,类只能被单继承。
重写(覆盖)和隐藏
-
在继承中,子类和父类的方法名和参数列表相同,返回值类型一致,访问修饰符相同或变大,抛出异常相同或变小。
-
在继承中,成员变量只能被隐藏,不能被重写。
-
变量可以交叉隐藏,实例变量隐藏静态变量,静态变量隐藏实例变量
-
static方法不能被重写,只能被隐藏
-
static方法不能重写实例方法,实例方法也不能重写static方法
super关键字:
- 在子类调用父类的构造方法,必须放在构造方法的第一行
- 调用父类的属性和方法
- super只能出现在子类,不能在static成员中使用
子类初始化过程
- 加载父类,初始化父类的静态变量
- 执行静态代码块和赋值等操作
- 加载子类,初始化子类的静态变量
- 执行子类的静态代码块和赋值等操作
- 初始化父类的实例变量
- 执行父类的实例代码块和赋值
- 执行父类的构造
- 初始化子类的实例变量
- 执行子类的实例代码块和赋值
- 执行子类的构造
final关键字:
- final可以修饰类,方法和属性
- final修饰的类不能被继承
- 修饰的方法不能被重写,但能重载
- final修饰的变量不能被再次赋值
this和super的区别
区别 | this | super |
---|---|---|
调用方法 | 访问本类的方法,包括从父类继承的方法。 | 访问父类的方法。 |
调用构造 | this表示调用本类的构造方法,必须放在构造方法的首行 | super表示调用父类的构造,必须放在子类构造的方法首行。如果表示调用父类的无参构造,即super()可省略。 |
调用字段 | this.字段:调用当前对象的字段,包括从父类继承的字段。 | super.字段:调用的是父类的字段。 |
使用 | this在实例方法中可以使用,在static方法中不能使用,每个类都有this | super在实例方法中可以使用,在static方法中不能使用,只能出现在子类中 |
其他区别 | this表示当前对象 | super表示父类对象 |
多态
类或方法的多种形态。父类引用指向子类,调用方法的时候要看具体的那个对象,方法重写是实现运行多态的基础;方法重载是编译时多态;多态允许针对不同对象调用统一的接口,实现代码的复用性和扩展性。