一、封装
1、概念
指隐藏对象的属性和实现细节,仅对外提供公共访问方式
2、实现
1.private
使用private关键字将成员变量和方法修改成私有变量和私有方法
例如下面代码中age为私有变量,在任何另一个类中使用Person创建的对象不能访问age变量:
class Person {
public String name;
private int age; //age变量为私有变量
}
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.name = "faker";
p.age = 30; //非法
}
}
需要通过setXxx,getXxx方法才能访问该变量
class Person {
public String name;
private int age;
public void setAge(int age) {
this.age = age;
}
public String getAge() {
return "年龄是"+age;
}
}
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.name = "faker";
p.setAge(30);
System.out.println(p.getAge);
}
}
2.protected
使用protected关键字将成员变量和方法变为受保护的成员变量和方法,使所修饰的成员可以被本类和派生类直接访问
class Person {
public String name;
protected int age;
}
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.name = "faker";
p.age = 30 ; //合法
System.out.println(p.age) ; //合法
}
}
Java类的可访问性排序:public>protected>default>private;
默认可访问性为protected
3、好处
提高代码复用性,具有安全性
二、继承
1.概念
继承是类与类之间的关系,可以理解为一个类从另一个类获取方法和属性的过程。子类拥有父类全部的方法和属性,子类可以覆盖父类的方法和访问父类中除private类的所有成员变量
本类 | 同包 | 非同包子类 | 其他 | |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
2.实现
1.extends关键字
首先,我们定义一个People类
class People{
String name;
int age;
int height;
void say(){
System.out.println("我的名字是 " + name + ",年龄是 " + age + ",身高是 " + height);
}
}
然后,我们需要定义一个Teacher类,既有People类中的name,age,height属性和say()方法,又要有 school、seniority、subject 属性和 lecturing() 方法,我们可以先继承类People的成员再增加自己的成员,且我们可以覆盖原People类的say()方法
class Teacher extends People{
String school;
String subject;
int seniority;
void say(){
System.out.println("我叫" + name + ",在" + school + "教" + subject + ",有" + seniority + "年教龄");//重写父类的方法
}
void lecturing(){
System.out.println("我已经" + age + "岁了,依然站在讲台上讲课");
}
}
2.super关键字
super关键字可以调用父类中声明为private的变量和调用父类的方法
class Person {
String name;
private String intr = "Hello,everyone";
public void say() {
System.out.println("This is "+name);
}
public String getIntr() {
return intr;
}
}
class Male extends Person{
public void say() {
System.out.println(super.getIntr()); //调用父类的变量
super.say(); //调用父类的方法
}
}
public class Test {
public static void main(String[] args) {
Male a = new Male();
a.name = "Jack";
a.say();
}
}
结果:Hello,everyone
This is Jack
3.final关键字
final可以把类声明成final类,final类不能被继承,即不能有子类
final修饰父类中的一个方法,该方法不允许子类重写
被final修饰的成员变量或局部变量为常量,所以程序声明该常量时必须指定该常量的值
三、多态
1.概念
多态是同一个行为具有多个不同表现形式或形态的能力,多态就是同一个接口,使用不同的实例而执行不同操作
2.实现
class Person {
void say() {
}
}
class Male extends Person {
void say() {
System.out.println("I am a man");
}
}
class Female extends Person {
void say(){
System.out.println("I am a woman");
}
}
public class Test {
public static void main(String[] args) {
Person p;
p = new Male();
p.say();
p = new Female();
p.say();
}
}
结果:I am a man
I am a woman
四、总结
第一次写预习博客没有什么思路,只能按照教材和网课的思路写,刚开始只想着看网课,现在才意识到教材的重要性。对java的一些细节还是不太清楚,需要慢慢梳理掌握。