看完这篇博客,深刻了解面对对象的封装、继承、多态

本文详细介绍了Java中的面向对象特性,包括封装的概念与实现,如私有化属性、set/get方法;继承的规则、super关键字的使用、方法重写以及子类访问权限;多态的概念、向上转型和向下转型的应用。通过本文,读者将对Java的面向对象编程有更深入的理解。
摘要由CSDN通过智能技术生成

java 面对对象

1.封装

概念

使用private将属性或者方法进行封装,让数据被保护在内部,程序的其他部分只能通过被授权的方式才能进行访问和操作。

实现

1.将属性进行私有化(private)

2.提供一个set方法,用于对属性的判断和赋值

3.提供一个公共的方法get,用于获取属性的值

class Person{
    //私有化年龄和姓名两个属性
    private String name;
    private int age;
    
    //获得name的get方法
    public String getName() {
        return name;
    }
    //给name赋值的set方法
    public void setName(String name) {
        this.name = name;
    }
    //获得age的get方法
    public int getAge() {
        return age;
    }
    //给age赋值的set方法
    public void setAge(int age) {
        this.age = age;
    }
}

2.继承

概念

继承是从已有的类中派生出新的类,新的类能继承已有类的数据属性和行为,并能扩展新的能力(方法,属性)。

其中被继承的类叫做父类、超类或者基类,继承父类的被叫做子类或者派生类。

规则

1.要使用继承必须满足is a 关系,比如狗是动物,人也是动物,所以人和狗都可以继承动物。

2.一个子类只能继承一个父类,也就是单继承关系,但是父类可以被许多个子类继承。

3.子类会继承父类所有的属性和方法,能否继承需要看父类的属性和方法的访问权限。

4.隐式继承(private属性和方法),子类继承了这个方法和属性,但是无法直接使用。

5.子类必须调用父类的构造器,完成父类的初始化

6,当创建子类对象时,只要子类调用了构造器,就会默认先去调用父类的无参构造器,如果父类中没有无参构造器,则需要用super关键字去指定父类的具体构造器完成对付类的初始化。

7.当子类调用父类的构造器时,不止会调用父类的,还可能会调用父类的父类的构造器,一直往上调用超类的构造器。

super关键字

1.super修饰属性,表示从父类中寻找同名属性,但不能访问private属性;使用方式super.属性名

class Animal{
    public void eat(){
        System.out.println("动物正在吃");
    }
}
class Person extends Animal{
    public void  test(){
        super.eat();
    }
}

2.super修饰方法,修饰构造方法和普通方法。但不能访问private方法;使用方式super.方法名(参数列表)

3.super在使用时,必须放在构造器的第一行

4.super和this都必须放在构造器第一行,所以两个方法无法同时写在构造器第一行。

5.当父类和子类的成员中有重名时,为了访问父类的成员,必须通过super去访问。

方法重写

方法重写是指发生在有继承关系的类之间,子类定义了和父类除了权限不同外的完全相同的方法,方法名称,返还值,参数列表完全相同。

注意———子类的返还值的类型是父类返还值类型的子类同样可以。

子类覆写方法权限

子类覆写方法权限>=父类权限,private方法无法被覆写,父类中的private方法无法被子类直接使用=>子类压根就不知道父类有这方法,更何谈覆写。

比如子类的public void fun(){}方法 可以访问父类的protected(或者默认) void fun(){}方法。

子类访问权限

当一个子类继承了一个父类,并且父类方法、属性等带有权限,则子类的访问权限必须大于父类(private访问权限除外)。

子类方法不能缩小父类方法的访问权限。

3.多态

概念

同一个引用调用同一个方法名,根据引用指向不同的对象可以表现出不同的行为叫做多态。

多态常用形式:继承 + 方法重写

向上转型

本质:父类引用指向了子类的对象

父类名称 父类引用 = new 子类实例();

Person person = new China();

person引用不管指向的具体是那个对象,能调用哪些方法是Person这个类说的算,person能.谁是new后面的。

向下转型

使用场景:已知一个父类引用,但是我们要使用子类的拓展方法,此时就得把这个父类引用还原为子类引用(只有一个对象)。

子类名称 子类引用 = (子类名称) 父类引用; China china = (China) person;

Animal animal = new Dog();

animal. play()// error   

此时在不创建新子类对象的前提下,就得使用向下转型。

Dog dog = (Dog) animal;//right

向下转型只能强转父类的引用,不能强转父类的对象。

向下转型要求父类的引用必须指向的时当前目标类型的对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值