java类和对象

举报
搞前端的半夏 发表于 2022/04/30 22:57:33 2022/04/30
【摘要】 类和对象 一. 类主观抽象,是对象的模板,可以实例化对象习惯上类的定义格式:public class XXX{ 属性; 构造器; 方法;}定义属性:实例变量([]表示可选)格式:[修饰符] 类型 变量名 [= ?];实例变量定义在类中但在任何方法之外。实例变量有默认值:各种各样的0.实例变量的作用域至少在本类内部,受访问控制符的限制。在重合作用域,实例变量和局部变量允许有...

类和对象

一. 类

  1. 主观抽象,是对象的模板,可以实例化对象

    习惯上类的定义格式:

    public class XXX{
        属性;
        构造器;
        方法;
    }
    
  2. 定义属性:实例变量([]表示可选)

    格式:[修饰符] 类型 变量名 [= ?];

    实例变量定义在类中但在任何方法之外。

    实例变量有默认值:各种各样的0.

    实例变量的作用域至少在本类内部,受访问控制符的限制。

    在重合作用域,实例变量和局部变量允许有命名冲突,‘局部优先’

  3. 定义方法

    格式:[修饰符] 返回值类型 方法名 (参数列表)[throw 异常]{ 。。。。}

    Java中所有参数都是值传递

    当没有返回值时,返回值类型必须被定义为 void

    返回值类型必须与方法名相邻,其他修饰符可以调换位置

  4. 构造器

    在创建对象的过程中调用的方法。

    构造器没有返回类型

    构造器的名字与类名相同

    格式为:[修饰符] 类名 (参数列表){…},修饰符可以是private,protect,default,private.

    在一个对象的生成周期中构造器只调用一次,由系统自动调用,不允许手工调用。

    程序员没有提供一个构造器,系统会自动提供一个无参的构造器。

    获得对象的方式 :

     通过new(在内存中申请分配空间),new 类名(),可以通过这种形式获得一个对象,这时的对象是无法使用的,必须把他的地址放进一个对象变量才能够使用。例如: Car c =new Car()。
     
     注意在写类是最好提供一个无参的构造器。
    
  5. this 关键字:

    this是个隐含参数,代表当前对象;

    public class stu{
        public String name;
        public void setname(String name){
            this.name=name;//this.name为当前对象的成员变量
        }
    }
    
    

    如果某个构造方法的第一个一句具有形式this(),那么这个构造方法将调用同一类中的其他构造方法。

    注意构造方法this(…)必须放在该构造器的第一行。

    this不能出现在静态页面

二. 类 对象 实例 三者的关系:

  1. 类:是对象的模板,可以实例化对象。
  2. 对象:类的个体
  3. 实例:实现的对象
    student s;
    s=new student();
    
    其中student()是类,s为对象,new student()为实例,s赋值后也是实例。

三. 方法重载 封装 继承 多态

  1. 重载:

    方法名相同,参数表不同,不考虑返回值类型(但最好还是使返回值类型一致)。

    编译器根据参数,选择一个方法,如果没有完全匹配的,对于参数表采用“向上就近匹配原则”,但不允许模棱两可。

    方法重载屏蔽了一个对象的同意方法由于参数不同造成的差异

  2. 封装

    类的属性加private修饰符,来限制只能够在类内部进行访问,有效的保护数据。

    对于类中的私有属性,要对其给出一对方法getXX(),setXX()访问私有属性,保证对私有属性的操作安全性.

    方法公开的是方法的声明,即只需知道参数和返回值就可以调用该方法,隐藏方法的实现细节。

    一个对象和外界的联系应当通过一个统一的接口,应当公开的公开,应当隐藏的隐藏

  3. 继承:

    父类到子类是从一般到特殊的关系。

    1. 泛化:将不同子类中的共性抽象成父类的过程。
    2. 特化:在原有父类的基础上加入一些个性的过程。
    3. 原则:父类方共性,子类方个性。

    继承的关键字:extends

    java 只支持单继承,一个类最多只有一个直接的父类。

    方法覆盖:

    1. 方法名相同
    2. 参数表相同
    3. 访问限制符:相同或更宽
    4. 返回值类型:相同或者子类返回的类型是父类返回的类型的子类
    5. 抛出的异常:不能比父类的更宽

    super关键字

    1. super()表示调用父类的构造器
    2. super()也和this()一样必须放在方法的第一句
    3. super()和this不能同时出现
    4. super()可以屏蔽子类属性和父类属性重名时带来的属性遮盖,super。表示调用父类的方法或者属性
    5. 在子类的构造器中如果没有指定调用父类的哪一个构造器,那么就会调用父类的无参构造器,即super()

    注意:

    1. 父类的构造器不能被子类继承,只能调用
    2. 方法和属性可以被继承,权限不限制能否继承过来,限制的是能否直接访问。
    3. 先构造父类,在构造子类。
  4. 多态

多态分为编译时多态和运行时多态

编译时类型:主观概念,把他看做什么

运行时类型:客观概念,实际他是什么

例如:Animal a=new dog()

指着狗问,这个动物是什么?

运行时多态的三原则:

  1. 对象类型不变
  2. 只能对对象调用编译时类型中定义的方法
  3. 在程序的运行时,根据对象的运行时类型,找覆盖后的方法来调用。

强制类型转换:一定没有新对象生成。(父类的引用赋值给予子类的引用需要进行强制类型转换)
关键字:instance of

用法:引用 instance of 类名 判断这个引用所指的对象是否属于这个类。

在进行强制类型转换前,避免类型转换异常

if(a instanceof Dog){
				Dog d=(Dog)a;
			}

多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。