面向对象三要素:封装、继承、多态
一、封装
1 定义
细节(变量和方法)隐藏,成员变量设置为私有(private),然后提供set和get方法读和取。
通俗的讲,封装就是不允许直接访问成员变量,必须通过set和get方法来访问。
优点:安全,便于重构。
public class ThreeDemo {
private String userName;
//set方法:给私有化变量赋值
public void setUserName(String v) {
userName = v;
}
//get方法:获取私有化变量的值
public String getUserName() {
return userName;
}
}
public class Test {
public static void main(String[] args) {
ThreeDemo td = new ThreeDemo();
td.setUserName("Mike");
//无法直接访问td.userName,故不可以用td.userName = “Mike”赋值
System.out.println(td.getUserName());
}
}
2 this关键字
表示当前类的对象
1 通过 this 关键字可以明确地去访问一个类的成员变量,解决与局部变量名称冲突的问题。
2 通过 this 关键字调用成员方法.
3 可以在一个构造方法中去使用 "this([参数1,参数2…])"的形式去调用其他构造方法。
注意:
1 只能在构造方法
中使用this去调用其他构造方法
2 this关键字调用构造方法只能放在第一行
,且只出现一次
3 不能在同一个类的两个构造方法中互调,产生编译错误
public class Father {
public String name;
public int age;
public Father() {
//无参构造方法
System.out.println("Father");
}
public Father(String name, int age) {
//有参构造方法
System.out.println("Father!");
}
}
public class Child extends Father{
public Child() {
this("Mike");
//super()与this()不能同时出现在构造函数中
//因为二者都需要放在构造函数的第一行
//但可以只写this,因为系统会自动使用super()
System.out.println("Child");
}
public Child(String str) {
System.out.println("Child!");
}
public static void main(String[] args) {
Child c = new Child();
}
}
二、继承
1 定义
通过关键字extends来声明子类与父类的继承关系:子类 extends 父类
1 所有类都有父类,即所有类都派生于Object类
2 只能单亲继承,即每个子类只能有一个父类
3 子类可以直接使用继承的变量和方法,不需要再在子类中声明或写出
4 子类只能继承父类的非private修饰的变量和方法
5 如果子类中公有的方法影响到了父类的私有属性,那么私有属性是能够被子类使用的。即通过父类的公有方法访问到父类的私有变量。
public class Father {
public String name;
public int age;
private String hobby;
<