关于类和对象一周总结

    对于Java来说,可以用代码来模拟现实生活中的实例,对于生活来说,哈士奇,雪纳瑞,藏獒都是"狗",蓝短,布偶都是“猫”,对于这种例子来讲,狗和猫都是一个类别,哈士奇,布偶等等都是狗和猫的一个具体的品种,在这种情况下,对于java来说,“狗”就是一个具体的类,哈士奇,雪纳瑞,大狗小狗,都是“狗”类的一个具体的实例,也就是一个具体对象。
    对于java来讲,有基本数据类型,也有引用数据类型,类就是一个特殊的引用数据类型,类就是对象的数据类型。
    创建类的语法是,public class 类名{
    }
    在一个类中可以有属性和方法,对于类下直接创建的属性,我们一般称之为成员变量,成员变量的声明是,public class 类名{
                                访问修饰符 变量类型 变量名;
    }
    对于类里方法创建的对象一般称之为局部变量,跟之前的if{},for,while里创建的对象一样,这些变量都称之为局部变量,局部变量的声明方式为
                                public class 类名{
                                public void 方法名(){
                                访问修饰符  变量类型 变量名 = 初值;
                }
                                
    }
    要注意成员变量和局部变量的区别
    1.创建位置不一样
        成员变量直接创建在类下,属于类的全局变量,局部变量创建在方法下,属于方法
    2.初始值不同
        成员变量会被系统存储进内存,并被系统默认赋予初始值,所以我们声明的时候不用               给他初始值,但是局部变量系统不会为他赋初值,我们一般需要为他赋初始值
    3.作用域
        成员变量可以作用于整个类中,局部变量只能用于定义他的方法里
    4.优先级不一样
        局部变量可以和成员变量同名,而且,存在局部变量的时候,局部变量优先级比成员变量更高,此时要调用成员变量时,需要用this.成员变量名来调用
    5.生命周期不一样
        成员变量随对象创建而创建,随对象销毁而销毁,局部变量随方法创建而创建
    6.存放位置也不一样
        成员变量存放在堆中,局部变量存放在栈中
    7.修饰符不同
        成员变量可以被static和控制修饰符修饰,但是局部变量不可以被static修饰
    当我们创建完类之后,我们可以通过类名 对象名 = new 对象名();来创建这个类的一个实例,通过这个对象,我们可以调用这个类里的属性和方法,中间通过"."这个字符来调用,调用规范为:对象名.属性名;对象名.方法名();
    我们创建一个类的时候,如果输出类里的内容,我们需要定义一个带main方法的类,在这个类中,创建原类的对象,再通过输出语句来输出。
    当我们创建完类的时候,定义了成员变量,我们输出之前,需要给成员变量赋值,赋值方法在成员变量的修饰符为public的时候,可以直接通过对象名.属性 = 值;这个时候,我们去输出的时候,就可以把带值的变量输出。
    可是,如果成员变量太多的时候,我们一个个去赋值就会出现代码冗余的情况,重复的代码有很多,所以我们创建类的时候,一般都需要创建构造方法,构造方法和类名同名,声明的方式是,public 类名(){
    }
                        public 类名(变量类型 变量名){
    }
    前一种是无参的构造方法,后面是有参构造,当我们有成员变量的时候,我们就需要定义一个有参的构造方法,参数列表可以携带所有的成员变量,中间用","隔开,在我们创建对象的时候,可以直接在对象名 = new 对象名();()括号中,按照构造方法携带的参数类型来一个个赋初值,避免一个一个赋值的代码冗余。
    this的作用:
    1.this可以用来调用成员变量,this.变量名
    2.this可以用来调用方法,this.方法名()
    3.this可以调用构造方法,this();
    要注意,在调用构造方法的时候,需要写在一个不同的构造方法中,且一个构造方法只能调用一个构造方法,在调用的时候,this需要写在第一行。
    注意构造方法和普通方法的区别:
    1.命名不一样
        构造方法必须要和类名一模一样,包括大小写,普通方法则遵循驼峰,见名知意
    2.创建方式不一样
        普通方法 访问修饰符 返回值类型 方法名(参数列表){方法体}
        构造方法 访问修饰符 方法名(参数列表){方法体}
    3.返回值
        构造方法没有返回值和返回值类型,普通的有返回值时,返回值类型和返回值相同,没有返回值时,返回值类型为void。
    4.作用不一样
        构造方法是为了给对象初始化,并赋初值,普通方法是实现一个功能
    对于类来说,如果定义了一个有参的构造方法,必须要定义一个无参的构造方法。而且构造方法必须用public修饰,如果用private不能在别的类里被实例化。
    封装:
    对于上面的成员变量用public修饰的时候,任何人都可以修改成员变量,此时,如果苹果类里出现了一个叫西瓜的对象,虽然不会报错,但是不符合实际,所以此时我们就需要对输入做一个权限限制,并对输入的值做一个校验,只有满足的时候,才能赋值,此时就需要用到方法的封装,封装的步骤:1.成员变量私有化2.定义get set方法3.方法实现
    在对成员变量私有化的时候,需要用到访问权限修饰符,private,在这个权限修饰符下,就不能被随意修改,那此时就需要用公共的方法,提供对私有化变量的访问,所以方法的访问权限修饰符一般用public,我们在测试类中,就需要把之前赋值的方法换成set,把要赋的值给定。在set中我们可以提供校验方法,判断赋值是否符合规范。当我们类中需要用到这个值的时候,就需要用到get方法。所以在以后的类中,我们创建类时就需要几个必要元素,成员变量私有,构造方法,get set方法。
    方法的重载:
    在一个类中,有时需要方法名一样的几个方法,那此时我们就需要用到方法的重载,方法的重载是指,返回值类型一致,方法名一致,唯有参数列表不一致时,实现不同的方法时的概念。
    在类中还有一种特殊的修饰符,static,静态的,又称类,静态变量和静态方法不依托实例,它直接由类创建,在调用属性和方法时,不需要再用对象.来调用,而是可以直接用类名.属性名,类名.方法名();调用就行,用static修饰的方法,只会被执行一次,在程序执行完成之后就销毁。
    继承:
    继承和封装同为java三大特性之一,我们在编写程序的时候,我们往往会有很多重复的代码,比如在不同的水果类中,我们拥有一样的属性,甜度,价格,等等,那我们可以把所有的水果类的共有的属性和方法提取数量,放在一个共有的类里,这个类又被称为父类,比如我们有banana香蕉类,apple苹果类,orange橙子类的时候,我们就可以给一个fruit水果类,此时水果类里就可以给定所有水果里共同的属性和方法,用extends关键字来继承,格式为public class 类名 extends 父类名{}。
    继承的时候,子类不能继承父类的东西:
    1.构造方法
    2.父类中用private修饰的属性或方法
    3.不在同一个包下时,父类中用默认修饰符修饰的属性和方法
    当我们想在子类中调用父类的属性和方法时,我们需要使用super这个关键字,调用格式是,super.属性名;super.方法名();在子类的构造方法中,默认有super();方法,隐式调用父类的无参构造方法,若是显示调用父类的有参构造方法时,则不会再调用无参构造方法。
    在有继承的时候,可以实现方法的重写,在子类继承父类的时候,有些时候,需要子类自己特殊的执行,那此时我们就需要方法的重写,比如父类动物类的eat方法,但是每个动物吃的东西和吃东西的方法都不一样,此时就需要我们去调用每个子类不一样的eat方法,在这个时候,我们就需要去重写父类的方法,子类的方法和父类的一模一样,只是方法体里的东西不一样,执行不一样的东西。
    多态:
    封装,继承,多态,java面向对象三大特征,多态是基于继承和方法的重写,当我们有多个子类且子类重写的方法都不一样时,就会体现出多态,多态是一个现象而不是一个具体的方法,在多态中,我们会引入一个运算符instanceof 它左边是对象,右边是类名,比较的是,这个对象是否是这个类创建的实例,用来判断父类创建的这个对象,具体指向哪个子类,执行哪个子类的方法,在此时我们需要对父类进行向下转型。
    抽象类和接口:
    对于我们的父类中,我们通常会定义一些方法体为空的方法,那此时,如果有很多没有方法体的方法,会显得结构紊乱,那此时我们就想去掉方法体,这个时候就需要用到abstract关键字,用来形容抽象,public abstract void 方法名();抽象方法就不需要方法体了,那此时,类名会报错,因为抽象方法必须在抽象类中定义,普通类里不可以存在抽象方法,所以我们需要把类也用abstract修饰,当我们继承的是抽象类时,我们需要把所有的抽象方法在子类中都重写,不然会报The type demo1 must implement the inherited abstract method abstractStudy.read()错误。
    接口就是个特殊的抽象类,在创建的时候,新建一个interface文件
    public interface 接口名{
    }
    类表明的是is a的关系 小狗是一个狗
    接口表明的是has a的关系
    一个类只能直接继承一个父类,但是接口可以实现多继承,继承时,用","隔开来,一个类可以继承一个类的同时,实现多个接口
        public class 类名 extends 父类名 implements 接口名1,接口名2,接口名3.。。。{
        }
        接口中规定了一个类方法的规范,
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值