资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: 计算机考试归档 最新发布

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(开闭原则)

什么开闭原则?

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

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

  •         对于返回值类型是基本数据类型,必须一致。
  •         对于返回值类型是引用数据类型,重写之后返回值,类型可以变小。(但是意义不大)
转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/1095623.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【JAVA核心(封装,继承,多态)】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2