面向对象的三大特征

面向对象的三大特征,第1张

继承:

     可以让一个类继承另一个类的属性和方法.

继承的使用:

     先创建一个父类,在父类中定义一些属性和方法.

package com.MyLol;

public class Army {

    //打击敌人
    public String beat(){
        return null;
    }
    //保家卫国
    public void defend(){
        System.out.println(beat());
    }
}

在创建一个子类用extends关键字继承父类的属性和方法.

package com.MyLol;

public class Airforce extends Army{
      @Override
    public String beat(){
        return "我是空军,我要用导d打击敌人";
    }
}



package com.MyLol;

public class LandArmy extends Army{
    @Override
    public String beat(){
        return "我是陆军, 我用坦克打击敌人";
    }
}




package com.MyLol;

public class Navy extends Army{
    @Override
    public String beat() {
        return "我是海军,我要用鱼雷打击敌人";
    }
}

创建一个测试类,使用子类创建一个对象,就可以获取父类的属性和方法了

package com.Test001;
import com.MyLol.Airforce;
import com.MyLol.Army;
import com.MyLol.LandArmy;
import com.MyLol.Navy;

public class Test002 {
    public static void main(String[] args) {
        Army n = new Navy();
        n.defend();
        Army a = new Airforce();
        a.defend();
        Army l = new LandArmy();
        l.defend();
    }
}

子类继承父类的时候默认继承无参的构造方法

方法的重写

    在子类中对父类的方法进行重写

    可以让不同的子类具有不同的特性

    在java中所有的类都有一个父类,叫Object.

public class MyCommon extends Object{


}

常见的两种重写方法.

  通过重写toString()方法,将对象属性转换成字符串然后进行输出

 @Override
    public String toString() {
        return "MyCommon{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

   通过重写equals(Object obj),实现判断相等的功能

    @Override
    public boolean equals(Object o) {
        MyCommon common = (MyCommon) o;
        if(this.name.equals(common.getName())){
            if(this.age == common.getAge()){
                return true;
            }
        }
        return false;
    }
Super

  super就是指向父类对象的引用

  两个作用

     作用一:可以调用父类的属性和方法

    @Override
    public int getMoney() {
        return 0;
    }

    public void checkMoney(){
        System.out.println("余额:"+super.getMoney());
    }

   作用二:可以调用父类的构造方法

           每个类中都有一个默认的无参构造方法,当无参的构造方法被重载后,默认的无参构造方法就会失效.

          一个子类继承父类的时候,在使用子类创建对象的时候,必须调用父类的构造方法,(一般默认情况是调用父类的无参构造方法).

          一但父类的构造方法被草重载后,父类默认的无参构造方法就会失效,那么子类默认情况下就调用不到父类的无参的构造方法.

            解决方法:

                     方法一:给父类重新添加一个无参的构造方法

                      方法二:在子类中使用super调用父类有参的构造方法

    public MySon(int money){
        super(10);
        System.out.println("子类的构造方法");
    }


封装:

    概念

       在编程中要求高内聚,低耦合,某个B对象调用A对象的时候,B对象不需要了解A对象的细节

(高内聚概念:一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。

低耦合概念:一个完整的系统,模块与模块之间,尽可能的使其独立存在。即,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。)

        在面向对象设计中,主要通过封装来对对象的一些具体细节进行屏蔽;

封装类;

        主要针对的就是属性,构造方法和一般方法

封装的两个过程:

        主要是通过修饰符来调整属性,方法的可见性

         对于需要 *** 作的属性或方法,我们可以通过封装其他的开发方法进行暴露

两个属性重要的封装方法:

       getter:通过对属性的封装,获得属性的具体值.

                 返回类型必须是被封装属性的类型

                 必须使用小写的get开头

                 属性名称在get之后首字母要大写

    private int money;

    public int getMoney() {
        return money;
    }

  setter:通过对属性的封装,来修改属性的具体值

               输入的参数类型,要和封装的参数类型一致,没有返回值

               必须是小写的set开头

               属性名称在set之后,而且首字母需要大写

               在方法内部进行修改

方法不需要强制进行封装,主要是根据业务需求来定

常用的修饰符:

public:公共的

private:私有的

protected:受保护的

默认的(这个不用写)

多态:

     概念:

         多态是建立在继承的基础上,父类引用指向子类对象,从而产生多种形态

         父类引用仅能调用父类声明的属性和方法,子类特有的属性和方法不能调用

         如果子类重写了父类的方法,那么通过父类调用子类的时候,不同的子类就有不同的调用方法.

拆箱和装箱:

        向上转型是装箱,使用父类指向子类对象,叫做装箱.

Father f1 = new Hero();  //Father是hero的父类

        向下转型是拆箱,将父类强转成子类的类型,必须要拆箱之后才可以使用父类没有的属性和方法.

 Hero h1 = (Hero) f1;   //hero是f1的子类
 h1.skill();//调用hero的skill

         拆箱和装箱不会对new出来的对象有任何影响.

         在拆箱的时候如果类型不匹配的话,就会报错.

instance of:

          可以判断一个对象的类型

对象 instance of 类型  //返回一个boolean类型

         基本案例:

    if(all[i] instanceof Hero){
    	//发动一次英雄技能攻击
    	//对其进行拆箱
    	//Hero hero1 = (Hero) all[i];
    	//hero1.skill(all[index]);
    	((Hero)all[i]).skill(all[index]);
    }

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

原文地址: http://outofmemory.cn/langs/741262.html

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

发表评论

登录后才能评论

评论列表(0条)

保存