21天学会Java之(Java SE第五篇):继承、常用的关键字、封装及权限修饰符、多态

本文详细介绍了Java中的面向对象特性,包括继承、常用关键字(this, static, super, final)的使用,封装的概念、优点及权限修饰符的应用,以及多态的详解,涵盖多态的概念、使用要点、对象转型、instanceof运算符等核心知识点。通过实例帮助读者深入理解Java的面向对象编程思想。" 134874131,783471,华为OD机试模拟目录管理功能:JS编码解析,"['华为od', 'javascript']
摘要由CSDN通过智能技术生成

面向对象的三个基本特征是:封装、继承、多态

继承

继承可以使我们更容易实现类的扩展,在现实世界中比比皆是。并且继承实现了代码的重用,不用再重新发明轮子,提高了代码的复用性。

继承是用extends关键字实现的,例如:

class 子类 extends 父类{
    Java语句;… … …
}

可以通过一个哺乳动物的例子来理解:

public class ExtendsTest {
    public static void main(String[] args) {
        Human human=new Human("人类",173);
        //拥有自己定义的方法
        human.study();
        //继承了来自父类的方法
        human.suckle();
        human.viviparous();
		System.out.println("------------------------");
        Dog dog=new Dog("狗",50);
        dog.bark();
        //dog.study();无法使用Human类中的方法
        //继承了来自父类的方法
        dog.suckle();
        dog.viviparous();
    }
}
//Mammal是父类,Human和Dog是Mammal的子类
class Mammal{
    String name;
    int height;
    //哺乳动物的特性
    public void suckle() {
        System.out.println("哺乳");
    }
    public void viviparous() {
        System.out.println("胎生");
    }
}
class Human extends Mammal{
    //天然拥有父类的属性
    public Human(String name,int height){
        this.name=name;
        this.height=height;
    }
    //可以重写父类的方法
    @Override
    public void suckle() {
        System.out.println("人类是胎生的");
    }
    //可以自己定义方法
    public void study(){
        System.out.println(this.name+"身高"+this.height+",拥有高等智慧。");
    }
}
class Dog extends Mammal{
    public Dog(String name,int height){
        this.name=name;
        this.height=height;
    }
    public void bark(){
        System.out.println(this.name+"身高"+this.height+",会汪汪汪。");
    }
}

继承的使用要点

  1. 父类也称作超类、基类、派生类等。
  2. Java中只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。
  3. Java中类没有多继承,接口有多继承。
  4. 子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)。
  5. 如果定义一个类时,没有调用extends,则它的默认继承的父类是:java.lang.Object。

常用的关键字

this关键字

this的本质就是“创建好的对象的地址”,由于在构造方法调用前,对象已经创建。因此,在构造方法中也可以使用this代表“当前对象” 。

this常用的用法:

  1. 在程序中产生二义性之处,应使用this来指明当前对象;普通方法中,this总是指向调用该方法的对象。构造方法中,this总是指向正要初始化的对象。
  2. 使用this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句。
  3. 静态方法不需要定义类的对象就可以直接使用的,而this表示调用这个方法的对象,两个同时使用就矛盾了,静态方法被调用的时候是不存在类的对象的。所以,this不能用于static方法中。

static关键字

在类中,用static声明的成员变量为静态成员变量,也称为类变量。 类变量的生命周期和类相同,在整个应用程序执行期间都有效。它有如下特点:

  1. 为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化。
  2. 对于该类的所有对象来说,static成员变量只有一份。被该类的所有对象共享。
  3. 一般用“类名.类属性/方法”来调用。(也可以通过对象引用或类名(不需要实例化)访问静态成员。)
  4. 在static方法中不可直接访问非static的成员。

核心要点(参考上文this最常的用法的第三点):

  1. static修饰的成员变量和方法,从属于类。
  2. 普通变量和方法从属于对象的。

super关键字

  1. super是直接父类对象的引用,可以通过super来访问父类中被子类覆盖的方法或属性。

  2. 使用super调用普通方法,语句没有位置限制,可以在子类中随便调用。

  3. 若是构造方法的第一行代码没有显式的调用super(…)或者this(…);那么Java默认都会调用super(),含义是调用父类的无参数构造方法,这里的super()可以省略。

final关键字

  1. 修饰变量:被他修饰的变量不可改变,一旦赋了初值,就不能被重新赋值。
  2. 修饰方法:该方法不可被子类重写,但是可以被重载(因为重载本质上是两个不同的方法)。
  3. 修饰类:修饰的类不能被继承。比如:Math、String等。

封装及权限修饰符

封装的作用及其优点

  • 封装的作用
  1. 封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
  2. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
  3. 要访问该类的代码和数据,必须通过严格的接口控制。
  4. 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
  5. 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
  • 编程中封装的具体优点:
  1. 提高代码的安全性。
  2. 提高代码的复用性。
  3. “高内聚”:封装细节,便于修改内部代码,提高可维护性。
  4. “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作。

权限修饰符

Java中使用权限修饰符来控制哪些细节需要封装,哪些细节需要暴露的。 Java中4种权限修饰符分别为private、default、protected、public,它们说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限降到最低,从而提高安全性。

权限修饰符的访问范围:

权限修饰符 同一个类 同一个包 子类 所有类
private
无修饰符(default)
protected
public
  1. 私有权限(private):private可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被private修饰的成员,只能在定义它们的类中使用,在其他类中不能调用。

  2. 默认权限(default):类,数据成员,构造方法,方法成员,都能够使用默认权限,即不写任何关键字。默认权限即同包权限,同包权限的元素只能在定义它们的类中,以及同包的类中被调用。

  3. 受保护权限(protected):protected可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被protected修饰的成员,能在定义它们的类中,同包的类中被调用。如果有不同包的类想调用它们,那么这个类必须是定义它们的类的子类。

  4. 公共权限(public):public可以修饰类,数据成员,构造方法,方法成员。被public修饰的成员,可以在任何一个类中被调用,不管同包或不同包&

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值