zoukankan      html  css  js  c++  java
  • 面向对象2(继承,抽象类)

    继承的好处:

      1.1继承的出项提高了代码的复用性,提高软件开发效率;

      1.2继承的出现让类与类之间产生了关系,提供了多态的前提

    继承的注意事项:

        在Java中一个类只能有一个直接父类。例如:class A{}

                            class B{}

                            class C extends A,B{},(这种写法是错误的,一个类只能继承一个父类)

        可以通过多重继承实现,如:class A{}

                     class B extends A{}

                     class C extends B{}(这种写法是合法的)

      1.3继承后子类父类成员变量的特点:

        a:子类对象调用成员变量的时候,子类自己有,使用子类的,子类自己没有则调用父类的

        b:当子类父类中出现了同名成员变量,通过this关键字进行区分

        如:

    package com.zs.lx1;
    
    public class Demo {
        private int x,y;
    
        public int getX() {
            return x;
        }
    
        public void setX(int x) {
            this.x = x;
        }
    
        public int getY() {
            return y;
        }
    
        public void setY(int y) {
            this.y = y;
        }
        public void sum() {
            int x=4,y=3;
            System.out.println(x+y);//不加this时,传递的是子类自己的值,即x:4,y:3;结果为7
            System.out.println(this.x+this.y);//加this时,表示当前调用者本身的对象,当前调用者对象为Demo的对象d,d的x:5,y:5;结果为10
        }
    }
    package com.zs.lx1;
    
    public class Test extends Demo{
        public static void main(String[] args) {
            Demo d=new Demo();
            d.setX(5);
            d.setY(5);
            d.sum();
        }
    }

    this表示调用者本身的对象

    继承后子类父类成员方法的特性——>子类重写父类方法

      a:子类的对象调用方法的时候,子类自己有,使用子类自己的,子类没有的方法调用父类的;

      b:子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为override重写,复写,或者覆盖

      c:为什么重写父类的方法

          父类的方法最先存在的,那么如果项目需求改了,父类方法无法满足项目需求,但是项目中已经大量应用了该父类方法;

          如果随意改父类,那么功能就会出问题,所以要重写,在原来功能上提供更强力的功能。

    方法覆盖的注意事项

        权限:子类方法覆盖父类方法,必须要保证权限大于等于父类权限;

            四大权限:public>默认=protected>private

        重载与重写对比

          重载:权限修饰符无关

             方法名:重载的两个方法名必须相同

             形参的个数不同,形参的类型不同,两者至少满足一个

             重载与返回值类型无关

          重写:权限修饰符:子类方法的权限>=父类方法的权限

             方法名:子类方法名和父类方法名必须相同;

             形参列表:子类和父类的形参列表必须相同

             返回值类型:基本数据类型:必须相同

                   引用数据类型:子类方法的返回值类型与父类方法的返回值类型相同

                        或    子类方法的返回值类型是父类方法的返回值类型的子类

    抽象类的产生

        分析事物时,发现了共性内容,就会向上抽取,会有这样一种特殊情况,就是方法功能声明相同,但方法功能主题不同。那么这时也可以抽取,但只抽取方法声明,不会抽取方法主体,那么此方法就是一个抽象方法。

    抽象类的定义格式:

        抽象方法定义格式:

        public abstrac 返回值类型 方法名(参数);

        抽象类定义格式:

        abstract class 类名{

        }

    抽象类的使用方式

      public abstract class Develop{

        public abstract void work();

        public void wo(){

          system.out.println("普通方法") 

        }

      }抽象类不能被实例化,需要new其子类;子类继承普通该方法

    抽象类的特点

      抽象类和抽象方法都需要abstract修饰,抽象方法一定要定义在抽象类中。

      抽象类不可以直接创建对象。原因:调用抽象方法没有意义。

      只有覆盖了抽象类中的所有抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。

      之所以继承抽象类,更多的时在思想,是面对对象共性操作会更简单。

    抽象关键字abstract不可以和哪儿些关键字共存?

       private:私有的方法子类是无法继承到的,已不存在覆盖,

           而abstract和private一起使用修饰方法,abstract既要子类去实现这个方法,而private修饰符根本无法得

           到父类这份方法。互相矛盾。

    抽象类,可以没有抽象方法,可以定义带有方法体的方法,让子类继承后可以直接使用;

  • 相关阅读:
    域环境的搭建 (超级详细)
    sqli-labs(10)
    sqli-labs(9)
    mysql源码安装(5.1)
    查看mysql apache php nginx的编译参数
    LAMP的安装
    Mysql的安装(二进制免编译包) 5.1版本
    更改yum网易 阿里云的yum源。
    yum安裝的包如何保留到本地
    磁盘分区
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/10533271.html
Copyright © 2011-2022 走看看