什么是面向对象
Java的编程语言是面向对象的,采用这种语言进行编程称为面向对象编程(Object-Oriented Programming, OOP)。
面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据。
对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的属性有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。一个人也可以是一个对象,他的属性有:名字、身高、年龄;行为有:吃饭、学习、工作。
类:类是一个模板,它描述一类对象的行为和属性。
面向对象的三大特征:
1.封装
封装是面向对象的特征之一,是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过指定的方式。
在定义一个对象的特性的时候,有必要决定这些特性的可见性,即哪些特性对外部是可见的,哪些特性用于表示内部状态。
通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。
信息隐藏是用户对封装性的认识,封装则为信息隐藏提供支持。
封装保证了模块具有较好的独立性,使得程序维护修改较为容易。对应用程序的修改仅限于类的内部,因而可以将应用程序修改带来的影响减少到最低限度。
封装的优点
-
良好的封装能够减少耦合,符合程序设计追求“高内聚,低耦合”。
-
类内部的结构可以自由修改。
-
可以对成员变量进行更精确的控制。
-
隐藏信息实现细节。
实现Java封装的步骤
1. 修改属性的可见性来限制对属性的访问(一般限制为private),例如:
public class Person {
private String name;
private int age;
}
这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了私密。
2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
public class Person{
private String name;
private int age;
private boolean alive;
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public boolean isAlive() {
return alive;
}
public void setAlive(boolean alive) {
this.alive = alive;
}
}
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。
封装同时可以提高代码的安全性,例如普通的类属性不是private修饰就直接可以通过“对象名.属性 = xxx”对其赋值,但当我们用private修饰该属性后就不能这样对其做任意的修改了,而且我们还可以在其对外的访问方法中进行合法值校验。比如上例中的setAge()就可以更改为:
public void setAge(int age){
if(age > 120)
System.out.println("Age setting error");
else
this.age = age;
}
2.继承
继承是一种联结类的层次模型,并且允许和支持类的重用,它提供了一种明确表述共性的方法。
新类继承了原始类后,新类就继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。
派生类(子类)可以从它的基类(父类)那里继承方法和实例变量,并且派生类(子类)中可以修改或增加新的方法使之更适合特殊的需要继承性很好的解决了软件的可重用性问题。比如说,所有的Windows应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来的。但是有的应用程序用于文字处理,有的应用程序用于绘图,这是由于派生出了不同的子类,各个子类添加了不同的特性。
1.什么是继承?继承的好处是啥?
继承就是java允许我们用extends关键字,让一个类和另一个类建立起一种斧子关系
提高代码复用性,键上代码冗余,增强类的功能扩展性
2.类的继承格式:
class 父类 { }
class 子类 extends 父类 { }
继承的类型:需要注意的是 Java 不支持多继承,但支持多重继承。
3.继承后子类的特点?
子类继承父类,子类可以得到父类的属性和行为,子类可以使用
Java中子类更强大
4.继承需要满足什么样的设计规范?
子类们相同特征(共性属性,共性方法)放在父类中定义
子类独有的属性和行为应该定义在子类自己里面
5.继承有哪些特点?
子类可以继承父类的属性和行为,但是子类不能继承父类的构造器
Java是单继承模式:一个只能继承一个直接父类
Java不支持多继承,但是支持多层继承
Java中所有的类都是Object类的子类
6.在子类方法中访成员(成员变量,成员方法)满足:
就近原则,子类没有找子类,子类没有找父类,父类没有就报错!
7.如果子父类中出现了重名的成员,磁石如果一定在子类中使用父类的怎么办?
super.父类成员变量/父类成员方法
3.多态
多态性是指允许不同类的对象对同一消息作出响应。
多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
创建初始化对象
使用new关键字创建对象
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象 进行默认的初始化以及对类中构造器的调用。
this关键字
1.this关键字是什么?
出现在构造器和成员方法中,代表当前对象的地址
2.this关键字在构造器中、成员方法中可以做什么?
可以用于指定访问当前对象的成员
this和super详情
this:代表类对象的引用; super:代表父类存空间的标识.
关键字 | 访问成员变量 | 访问成员方法 | 访问构造方法 |
---|---|---|---|
this | this.成员变量 访问本类成员变量 | this.成员方法(...) 访问本类成员方法 | this(...) 访问本类构造器 |
super | super,成员变量 访问父类成员变量 | super,成员方法(...) 访问父类成员方法 | super(....) 访问父类构造器 |