10、Java基础篇——面向对象进阶(多态&包&final&权限修饰符)

本文介绍了Java面向对象编程中的多态概念,包括其应用场景、定义、运行特点及潜在问题。还讨论了包的作用、如何导入类以及权限修饰符(public、private、protected和default)和final关键字的使用。
摘要由CSDN通过智能技术生成

1、多态

多态是面向对象编程中的一个重要概念,它表示同样的方法在不同的对象上有不同的表现形式。它可以以不同的形式呈现,包括重载、覆盖和转换。

多态的使用场景: 当一个类需要被多个其他类继承,而这些子类又需要改变某个方法的行为时,可以使用多态来实现。另外,在实现接口、虚函数和抽象类的时候,也都会应用到多态。

多态的定义和前提: 多态是一种静态语法现象,它的运行时行为是基于对象的动态绑定。前提是存在继承或实现关系,并且重写了父类或接口中的方法。

多态的运行特点: 多态的运行特点包括以下几点:1)程序在运行时才能确定具体调用哪个方法;2)多个子类对象调用的是同一个父类方法,但得到的结果可能不同;3)可以通过父类引用指向子类对象,从而实现类型的隐藏和替换。

多态的弊端: 多态虽然可以实现灵活的程序设计,但同时也会带来一些问题,比如因为运行时绑定导致程序运行效率较低,以及容易出现类型转换和参数传递的问题。

//父类Animal
public class Animal {
    public void cry() {
        System.out.println("动物在叫");
    }
}

//子类Dog
public class Dog extends Animal {
    public void cry() {
        System.out.println("狗在汪汪叫");
    }
}

//子类Cat
public class Cat extends Animal {
    public void cry() {
        System.out.println("猫在喵喵叫");
    }
}

//测试类
public class TestPolymorphism {
    public static void main(String[] args) {
        Animal animal1 = new Animal();
        Animal animal2 = new Dog();
        Animal animal3 = new Cat();

        animal1.cry();// 动物在叫
        animal2.cry();// 狗在汪汪叫
        animal3.cry();// 猫在喵喵叫
    }
}

2、包

包是Java中用来管理类的一种机制,它可以将相关的类组织起来,提高程序结构的清晰度和可维护性。

(1)包的定义:

包是一组相互关联的类和接口的集合,它们存储在同一个文件夹或目录中,使用包名来区分不同的包,避免了命名冲突。

(2)导包:

在使用其他包中的类时需要进行导包,即通过import语句引入指定包的类,从而可以直接使用该类。

//com.example包中的HelloWorld类
package com.example;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

//导入com.example包中的HelloWorld类
import com.example.HelloWorld;

public class TestPackage {
    public static void main(String[] args) {
        HelloWorld hello = new HelloWorld();
        hello.main(new String[]{});
    }
}

3、权限修饰符

权限修饰符是Java中用来限制类、变量和方法的访问权限的关键字,包括public、private、protected和默认。

(1)权限修饰符的定义和使用:

权限修饰符用来设置类、变量和方法的访问级别。不同的访问级别决定了它们可以被哪些部分的代码访问。

(2)不同权限的访问能力:

public: 可以被任何代码访问。
private: 只能被本类中的代码访问。
protected: 可以被本类及其子类和同一个包中的代码访问。
默认: 可以被同一个包中的代码访问。

//Person类
package com.example;

public class Person {
    public String name;     // 公有变量
    private int age;        // 私有变量
    protected String gender;// 受保护变量

    public Person() {
        this.name = "Tom";
        this.age = 20;
        this.gender = "Male";
    }

    public void sayHello() {
        System.out.println("Hello, I'm a person.");
    }

    private void talkAge() {
        System.out.println("My age is " + age);
    }

    protected void talkGender() {
        System.out.println("My gender is " + gender);
    }
}

//Student类继承Person类
package com.example;

public class Student extends Person {
    public Student() {
        super();
    }

    public void study() {
        System.out.println("I'm studying.");
    }

    public static void main(String[] args) {
        Student student = new Student();

        System.out.println(student.name);       // public变量可以被访问
        student.sayHello();                     // public方法可以被访问
        //System.out.println(student.age);         // 私有变量不能被访问
        //student.talkAge();                       // 私有方法不能被访问
        System.out.println(student.gender);     // 受保护变量可以被访问
        student.talkGender();                   // 受保护方法可以被访问
    }
}

4、final关键字

final是Java中的一个关键字,它可以用来修饰类、方法和变量。使用final关键字可以使类、方法和变量成为不可修改的常量。

(1)final关键字的概述:

final是Java中的一个关键字,用于修饰类、方法和变量,使它们成为不可修改的常量。

(2)final关键字的使用方式:

final修饰类:表示该类不可被继承。
final修饰方法:表示该方法不可被子类重写。

//父类Animal
public class Animal {
    public final void cry() {
        System.out.println("动物在叫");
    }
}

//子类Dog,继承自Animal类
public class Dog extends Animal {
    public void cry() { //编译错误,无法覆盖父类中的final方法
        System.out.println("狗在汪汪叫");
    }
}

final修饰变量:表示该变量不能被重新赋值。

public class TestFinal {
    public static void main(String[] args) {
        final double PI = 3.1415926;
        //PI = 5.0; //编译错误,PI是常量,不可重新赋值
        System.out.println(PI);
    }
}

修饰局部变量

public class TestFinal {
    public static void main(String[] args) {
        final int num;
        num = 100; //正确,num是局部变量,只要在声明之后就可以赋值
        //num = 200; //编译错误,num已经被赋初值,不能再次赋值
        System.out.println(num);
    }
}

以上就是Java面向对象进阶(多态&包&final&权限修饰符)的全部内容,作者能力有限,如果不足请及时指出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值