JAVA核心(封装,继承,多态)

目录

一、面向对象的首要特征:封装

在代码级别上,封装有什么作用?

怎么进行封装?

 1、get方法的要求

 2、set方法的要求

二、Static

static:

变量的分类:

 变量根据声明的位置进行划分:

静态代码块

什么是静态代码块,语法是什么?

static静态代码块在什么时候执行?

三、实例语句块

实例语句块

实例语句语法

实例语句块在什么时候执行?

四、this

this什么?

this什么时候不能省略?

五、继承

继承作用?

java核心(方法的覆盖与多态)

六、覆盖

  什么时候我们会考虑使用“方法覆盖”呢?

当代码怎么编写的时候,在代码级别上构成了方法覆盖呢?

七、多态

        1、上线转型:

        2、向下转型

多态指的是?

八、多态开发中的作用

软件开发原则有七大原则(不属于java,这个原则属于整个软件业)

什么开闭原则?

对于相同值类型可以修改一下吗?


一、面向对象的首要特征:封装

        封装的作用:保证内部结构的安全,屏蔽复杂,暴漏简单。

在代码级别上,封装有什么作用?

        一个类体当中的数据,假设分装之后,对于代码的调用人员来说,不需要关心代码的复杂实现,只需要通过一个简单的入口就可以访问了。另外,类体中安全级别较高的数据封装起来,外部人员不能随意访问,来保证数据的安全性。

怎么进行封装?

第一步:属性私有化(使用private关键字进行修饰。)

private被这个关键字修饰后,该数据只能在本类中访问

private可以修饰 类、方法、还可以修饰属性

第二步:对外提供简单的操作入口

写一个方法专门完成读(get方法)

写一个方法专门完成写(set方法)

注意:java开发规范中有要求,set方法和get方法要满足以下格式

 1、get方法的要求

         public   返回值类型     get+属性名首字母大写(无参数){

                          return xxx;

}

 2、set方法的要求

        public    void  set+属性名首字母大写(有一个参数){

                        xxx=参数;

}

public class Person{

    private int age;
       
    //get方法
    public int getAge(){
        return age;
    }

    //set方法
    public void setAge(int age){//参数中的age不是上面的age,this.age才是上面的age
        this.age = age;//等号右边的age是参数中的age
    }
}

二、Static

static:

  1. static翻译为“静态”
  2. 所有static关键字修饰的都是类相关,类级别的。
  3. 所有的static修饰的,都是采用“类名”的方法来访问。
  4. static修饰的变量:静态变量
  5. static修饰的方法:静态方法

变量的分类:

 变量根据声明的位置进行划分:

      在方法体当中声明的变量叫做:局部变量。

      在方法体外声明的变量叫做:成员变量。

class varTest{
    //以下实例,都是对象相关,访问时采用“引用”的方法访问,需要先new对象。

    //成员变量中的实例变量。
    int i;
    public viid m2(){

    } 
    //以下静态的,都是类相关的,访问时采用“类名”的方式访问,不需要new对象。
    static int k;
    public static void m1(){
    
    }
}

1、加static的变量叫做静态变量。

2、静态变量在类加载时初始化,不需要new对象。

3、静态变量存储在方法区。

静态代码块

什么是静态代码块,语法是什么?

        使用static关键字可以定义:静态代码块

static {

        java语句;

        java语句;

}

static静态代码块在什么时候执行?

        类加载时执行,并且只执行一次

        注意:静态代码块在类加载时执行,并且在main方法执行前执行

        静态代码块一般是按照自上而下的顺序执行。

public class Test06{

    //静态代码块(特殊的时机,类加载时机。)
    
    static{
        System.out.println("A");
    
   } //一个类中可以编写多个静态代码块    
    
    static{
       System.out.println("B");
   }
    
    public static void main(String[] agrs){
    
   }
    
    static{
       System.out.println("C");
   }
    
}

三、实例语句块

实例语句块

        除了静态代码块之外,还有一种语句叫做:实例语句块

        实例语句在类加载时,没有执行。

实例语句语法

{

        java语句;

}

实例语句块在什么时候执行?

        只要是构造方法执行,必然在构造方法执之前,自动执行“实例语句块”中的代码。

public class Test{
    public static void main(String[] agrs){
        System.out.println("main begin");
    }
   //实例语句块
    {
        System.out.println("实例语句块执行");
    }
    
    public InstanceCode(){
        System.out.println("无参数构造方法");
    }    

   
}

四、this

this什么?

  1. this是一个关键字,全部小写。
  2. 一个对象一个this。
  3. this是一个变量,是一个引用,this保存当前对象的内存地址,指向自身。所以,严格意义上来说,this代表的就是“当前对象”。
  4. this存储在堆内存当中对象的内部。
  5. this只能使用在实例方法中。谁调用这个实例方法,this就是谁(还可以在构造方法中)所以this代表的是“当前对象”。
  6. “this”大部分情况下是可以省略的。
  7. this不能使用在静态代码中,静态方法中不存在当前对象。

this什么时候不能省略?

        

class student{
    private int no;
    
    public student(){
        
    } 
    public student(int no){
        this.no = no;
    }

    public void setNo(int no){
        this.no = no;
    }
}

1、this除了可以使用在实例方法中,还可以用在构造方法中。

2、新语法:通过当前的构造方法去调用另一个本类的构造方法,可以使用以下语法格式:

this(实际参数列表);

3、this()这个语法作用是什么?

public class Date{
    private int year;
    private int month;
    private int day;


    public Date(){//构造方法无参   
        this(2020,1,1);
   }
    public Date(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day  = day;
    }
}

对this()的调用只能是构造方法的第一行。

五、继承

继承作用?

基本作用:子类继承父类,代码可以得到复用

主要(重要)作用:因为有了继承关系,才有了后期的方法覆盖和多态机制。

class 类名 extends 父类名{

        类体;

}

继承也是存在缺点的:耦合度高,父类修改,子类受牵连。

任何一个类,没有显示继承任何类,默认继承Object。

注意:当源码当中一个方法以“;”结尾,并且修饰符列表中有“native” 关键字,表示底层调用C++写的dll程序(dll动态链接库文件)

class A{
}

class B extends A{
}

java核心(方法的覆盖与多态)

六、覆盖

  什么时候我们会考虑使用“方法覆盖”呢?

  • 子类继承父类之后,当继承过来的方法满足当前子类的业务需求时,子类有权力对这个方法进行重载编写,有必要进行“方法的覆盖”。
  • 方法的覆盖又叫做:方法重写,英语单词叫做: override overwrite 都可以
  • 比较常见的:方法覆盖,方法重写,override
class Animal{
    public void move(){
        System.out.println("动物在移动");
    }
}

class Bird extends Animal{
  //对move方法进行覆盖,方法重写,override
  //最好将父类中的方法原封不动的复制过来(不建议手动)
  //方法覆盖,就是将继承过来的那个方法给覆盖掉了,继承过来的方法没了
   
    public void move(){
        System.out.println("鸟儿在飞翔")

    }

}

class Cat extends Animal{
    //方法重写
    public void move(){
        System.out.println("猫在走猫步");
    }
}

重要结论:当子类对父类继承过来的方法进行“方法覆盖”之后,子类对象调用该方法的时候,一定执行覆盖之后的方法。

当代码怎么编写的时候,在代码级别上构成了方法覆盖呢?

        条件一:两个类必须要有继承关系。

        条件二:重写之后的方法和之前的方法具有:

  • 相同的返回值类型
  • 相同的方法名
  • 相同的形式参数列表              

        条件三:访问权限不能更低,可以更高。

        条件四:重写之后的方法不能比之前的方法抛出更多的异常,可以更少。

还有几点注意事项:(当学习多态方法后就明白了)

  1. 方法覆盖只是针对于方法,和属性无关。
  2. 私有方法无法覆盖。
  3. 构造方法不能被继承,所以构造方法也不能被覆盖。
  4. 方法覆盖只是针对于实例方法,静态方法没有覆盖的意义。

私有方法不能被覆盖

七、多态

        1、上线转型:

        子类-------转型-------->父类(自动类型转换)(upsasting)

        2、向下转型

        父类-------转型---------->子类(强制类型转换)(downcasting)

注意:java中允许向上转型,也允许向下转型。

无论是向上转型,还是向下转型,两种类型之间必须有继承关系,没有继承关系编译器报错。

多态指的是?

        父类型引用指向子类型对象。包括编译阶段和运行阶段。

        编译阶段:绑定父类的方法。

        运行阶段:动态绑定子类型对象的方法。

public class Test{
    public static void main(String[] args){
            
                
            //多态

            Animal a = new Cat();//向上转型
            Cat x = (cat)a //向下转型   
    
    }
}


class Animal{

}


class Cat extends Animal{

}

八、多态开发中的作用

软件开发原则有七大原则(不属于java,这个原则属于整个软件业)

        其中有一条最基本的原则:ocp(开闭原则)

什么开闭原则?

  •         对扩展开放(你可以额外添加,没问题)对修改关闭(最好很少的修改现在有程序)。
  •         在软件扩展过程中,修改越少越好。

对于相同值类型可以修改一下吗?

  •         对于返回值类型是基本数据类型,必须一致。
  •         对于返回值类型是引用数据类型,重写之后返回值,类型可以变小。(但是意义不大)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懿·格雷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值