面向对象(三):访问权限修饰符、重写、多态

面向对象(三):访问权限修饰符、重写、多态,第1张

一(访问权限修饰符)

在Java中,针对类,成员方法和属性提供了4种访问级别,访问级别由大到小分别为:public(共有的)---protected(受保护的)---default(默认的)---private(私有的)。

public:公共访问级别,如果一个类或者类的成员被public访问控制符修饰,那么这个类或者类的成员能被所有的类访问,不管访问类与被访问类是否在同一个包中。

protected:子类访问级别,如果一个类的成员被protected访问控制符修饰,那么这个成员既能被同一包下的其他类访问,也能被不同包下该类的子类访问。

default:包访问级别,如果一个类或者类的成员不适用任何访问控制符修饰,则称它为默认访问控制级别,这个类或类的成员只能被本包中的其他类访问。

private:当前类访问级别,如果类的成员被private访问控制符修饰,则这个成员只能被该类的其他成员访问,其他类无法访问。类的良好封装就是通过private关键字来实现的。

访问控制级别表
访问范围publicprotecteddefaultprivate
同一个类
同一个包×
不同包的子类××
不同包的非子类×××

在实际的开发过程中,private和public用得相对多一点。

二(重写)

当子类出现了和父类一模一样的方法声明(方法名和参数列表必须是一样的),就是重写。

覆盖(重写):@0verride(重写的标志),会帮你检查是否符合重写的语法格式  ,标志着这个方法是重写的父类的方法,可写可不写  。
访问修饰词:子类方法的访问权限大于等于父类方法的访问权限
            例如:
            父类方法访问权限是public,那么子类若想重写该方法必须用public
            父类方法访问权限是protected,那么子类若想重写该方法必须用public/protected
            父类方法访问权限是默认的,那么子类若想重写该方法必须用public/protected/默认
 返回值:
            void:若父类方法的返回值是void,则子类重写时,子类方法返回值必须也是void
            基本类型:若父类方法的返回值是基本类型,则子类重写时,子类方法返回值必须也是该基                                本类型
            引用类型:若父类方法的返回值是引用类型,则子类重写时,子类方法返回值可以是该引用类                            型也可以是该引用类型的子类
            结论:子类方法的返回值可以是父类方法的返回值的子类

方法名:子类与父类相同
参数列表(参数):子类与父类相同
方法体:可以相同,也可不同

重写的应用场景:
         当子类需要父类的功能,而且功能主体子类又持有自己内容时,可以重写父类的方法
         这样即沿袭父类的功能,又定义子类特有的内容

 重写和重载的区别:
             方法的重载

                     1.方法名相同参数列表不同
                     2.重载对访问权限没要求
                     3.重载是发生在同一个类上的关系
                     4.重载对返回值类型没要求    

             方法的重写:

                     1.方法名和参数列表相同
                      2.方法重写时:子类方法的访问权限必须大于或等于父类的访问权限
                                             访问权限由小到大:private < 默认                      3.重写一定是发生在,子类和父类之间(继承基础之上)
                     4.方法重写时:子类方法的返回值类型,要么和父类的相同,要么是父类返回值类                            型的子类 

方法的重写作用:
                    1.在父类中定义方法,子类里面会继承此方法。(保底方法)
                       在父类中添加各种子类共同的行为方式
                    2.方法重写之后,可以在父类的方法基础上做扩展。

方法的重写什么时候用:当子类的方法,需要在父类的方法基础上进一步扩展时,可以重写父类                                         的方法

方法的重载什么时候用: 当完成某件事情可以有不同的方式时,可以将这些不同的方式定义成重                                       载的方法。

三(多态)

多态的含义:java中,多态是指不同类的对象在调用同一个方法时所呈现的多种不同行为。通过多态,消除了类之间的耦合(耦合大概意思就是,若父类的属性一旦改变,所有子类的属性都会跟着改变.)  关系,大大提高了程序的可扩展性和可维护性。

多态需要满足的前提条件:
        1.要有继承或者实现(接口)关系
        2.要有方法的重写
        3.要有父类接收子类对象(父类引用指向子类对象)

package day10;
/*

    多态需要满足的前提条件
        1.要有继承或者实现(接口)关系
        2.要有方法的重写
        3.要有父类接收子类对象
 */
public class Demo1 {

    public static void main(String[] args) {
        // 3.要有父类接收子类对象(多态的表达形式:向上造型)
        Person p1=new Teacher();//父类引用指向子类对象
        /*
        通过p1可以调用什么,看p1前面的类型  p1.什么看Person有什么
       当方法发生重写,p1调用重写方法时,看new的对象  p1.重写方法()看后面new 类型是什么就调用该子类重写方法
         */

        //p1不能访问子类特有的方法,(装成父类,所以只能用父类中的属性和行为)
        //p1.teaching()不能调用子类特有的方法
        p1.name="仓#null";
        p1.sleep();
        //若想要调用Teacher特有的,则按照下列写法
//        Teacher t1=new Teacher();//子类引用指向子类对象
//        t1.name="波多野结衣";
//        t1.teaching();

    }
}
class Person{
    String name;
    public void sleep(){
        System.out.println(name+"在睡觉....");
    }
}
//1.要有继承
class Teacher extends Person {
    public void teaching(){
        System.out.println(name+"在上课....");
    }
    //  2.要有方法的重写
    @Override
    public void sleep() {
        System.out.println(name+"老师在睡觉....");
    }
}



在多态的学习中,涉及将子类对象当做父类类型使用的情况,这种情况在Java的语言环境中称为“向上转型”或“向上造型”,例如下面两行代码。

Animal an1=new Cat();//将Cat类对象当做Animal类型来使用
Animal an2=new Dog();//将Dog类对象当做Animal类型来使用

将子类对象当做父类使用时不需要任何显示声明,需要注意的是,此时不能通过父类变量去调用子类特有的方法。

注意问题:当父类和子类有相同属性和方法时,调用时分别调用谁的?
      口诀:属性看类型(属性看父类),方法看对象(方法看子类)。 能点出什么,看类型。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/992241.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存