Java的三大特性(封装、继承和多态)

一、封装

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的一些细节还是不太清楚,需要慢慢梳理掌握。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值