1. 封装
在对象外部, 可以使用对象名.属性名的方式给对象直接赋值
可能存在非法数据(违背现实世界中的实际情况)的输入
拒绝在类的外部直接访问成员属性/实例变量
使用相应的访问控制修饰符来控制对类中成员的访问
关键字: private
私有的, 只能在类的内部访问被private修饰的成员
在类的外部不能被直接访问
类中的成员属性被private修饰以后,必须提供该成员属性对应的get, set方法
setXXX(): 用来给指导成员属性赋值
getXXX(): 用来获取指定成员的属性
总结:
private: 私有的(对类的外部不可见)
防止类中的成员在外部被直接访问(调用)
提供相应的公共的set(), get()方法
在一个类中第一较多的成员属性
-- 建议所有成员属性都使用private修饰,然后提供
相应的get()及set()方法
public class Person{
private String name;
private int age;
public Person(){}
public Person(String name, int age){
this.name = name;
this.age = age;
}
public String setName(String name){
return this.name = name;
}
public String getName(){ return this.name; }
public int setAge(int age){
return this.age = age;
}
public int getAge(){ return this.age; }
}
-
JavaBean
1. 数据承载Bean 2. 业务逻辑Bean 数据承载Bean 1. 所有成员属性被private修饰 2. 提供有参数构造方法 3. 对外部提供相应公共的get, set法
2. 继承
对应现实世界中方的继承(子 继承 父) 继承: 至少有两个类组成一个继承关系
public class Teacher{
/*String name;
int age;
String gender;*/
// Teacher特有的成员属性
private double salary;
public void setSalary(double salary){
this.salary = salary;
}
public void getSalary(){
return this.salary;
}
}
public class Student{
/*String name;
int age;
String gender;*/
// Student中特有的成员属性
private double score;
public double getScore(){
return this.score;
}
public void setScore(double score){
this.score = score;
}
}
public class Person{
String name;
int age;
String gender;
}
首先我们将多个类中具有相同特征及行为的共性抽象出来,定义在一个单独的类中
再使用关键字: extends
语法: public class 子类类名 extends 父类类名{
// 定义子类中特有成员(成员属性, 成员方法)
}
被继承的类称之为: 父类/超类/基类
public class Animal{}
public class Dog extends Animal{}
public class Cat extends Animal{}
继承的概念: 类与类之间成员的赠与和获得
作用: 减少冗余代码,提高代码的重用性
特点:
1. 子类继承父类, 可以继承父类中的成员属性和成员方法
-- 构造方法不能被继承
-- 父类中的私有成员(成员属性, 成员方法)不能被继承
-- 父类中使用默认的修饰符所修饰的成员在不同包的
子类中不能被继承
-- 不在同一个目录下的子类不能被继承
2. 子类中可以拥有自己独有的成员属性和成员方法
3. 一个子类只能继承一个父类(单一继承)
-- 但是一个父类可以有多个子类
4. 如果一个类没有使用extends继承指定的父类那么该默认
继承Object类
访问控制修饰符
public : 公共的, 在任何地方都可以直接访问
private: 私有的, 只能在本类中直接访问
protected: 受保护的, 有继承关系的子类中可以访问
– 不在同一个目录下且没有继承关系则不能访问
default: 默认的, 可以在本类中及同包下的其它类中直接访问
当类中成员的访问权限不能明确时:
所有的成员属性一律使用 private 修饰, 并提供相应公共的get及set方法
方法重写/覆盖(Override)
1. 方法重载(Overload)
必须在同一类中 方法名称必须相同, 但参数不能相同
2. 方法重写
父类无法满足子类的需求,所以需要子类去重写父类中相应的成员方法
父类中的方法去实现某一个功能,但在子类中可以重新实现该功能
必须在具有继承关系的父子类中
特点:
1. 方法名称必须相同
2. 参数必须相同
3. 返回类型必须相同
4. 父类中使用访问控制修饰符要比子类中声明的访问控制修饰符的范围要小
– 子类的范围要大, 父类的范围要小
super关键字:
1. 可以调用父类中的成员
– super.成员名称
2. 调用父类中的构造方法
-- 对父类中的成员属性进行赋值
-- super(参数列表);
注意: 使用super调用父类中的构造方法时, 必须声明在
构造方法中的第一行(非注释行)
如果在构造方法中没有声明调用父类的构造方法
那么在该构造方法中编译器会自动添加一个: super();
类中构造方法中,只能使用this(参数列表)或super(参数列表)中的其中一个
有继承关系的对象的创建过程
对象创建过程:
1. 开辟内存空间
2. 使用成员属性数据类型的默认值进行初始化赋值
3. 调用构造方法进行赋值
4. 将产生的内存地址赋给引用变量
有继承关系的对象创建过程:
先创建其父类的对象, 调用父类中的构造方法对成员
属性进行赋值
关于面向对象理论确实也是比较多的, 只有多练习吧!!!