栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA面向对象

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA面向对象

1、什么是类?什么是对象?
  • 现实生活中由很多很多对象组成的,基于对象抽出了类
  • 对象:软件中真实存在的单个东西/个体
  • 类:类别/类型/模板,代表一类个体
  • 类是对象的模子,对象是类的具体的实例
  • 类中可以包含:
    1)对象所共有的属性/特征--------------------------成员变量
    2)对象所共有的行为/动作--------------------------方法
  • 一个类可以创建多个对象
2、如何创建类?如何创建对象?如何访问成员? 3、方法的签名:方法名+参数列表 4、方法的重载(overload):---------便于用户的调用
  • 发生在同一类中,方法名相同,参数列表不同
  • 编译器在编译时会根据方法的签名自动绑定调用的方法
5、构造方法:构造函数、构造器、构建器--------------复用给成员变量赋初始值
  • 给成员变量赋初始值
  • 与类同名,没有返回值类型(连void都没有)
  • 在创建(new)对象时被自动调用
  • 若自己不写构造方法,则编译器默认提供一个无参构造方法
  • 若自己写了构造方法,则不再默认提供
  • 构造方法可以重载
6、this

1、指代当前对象,哪个对象调用方法它指的就是哪个对象
2、只能用在方法中,方法中访问成员变量之前默认有个this.

  • this的用法:
    1) this.成员变量名------------------------访问成员变量
      注意: 当成员变量与局部变量同名时,访问成员变量时this不能省略
    2)this.方法名()-----------------------------调用方法(一般不用)
    3)this()---------------------------------------调用构造方法(一般不用)
7、null:表示空,没有任何指向对象

1、若引用的值为null,则该引用不能再进行任何点操作了
2、若操作则发生NullPointerException空指针异常

8、引用类型数组
1) Student[] stus = new Student[3];
   stus[0] = new Student("zhangsan",25,"LF");
   stus[1] = new Student("lisi",26,"JMS");
   stus[2] = new Student("wangwu",24,"SD");
   System.out.println(stus[0].name); //输出第1个学生的名字
   stus[1].age = 27; //给第2个学生的年龄修改为27
   stus[2].sayHi(); //第3个学生跟大家问好
   for(int i=0;i //遍历所有学生
       System.out.println(stus[i].name); //输出每个学生的名字
       stus[i].sayHi(); //每个学生跟大家问好
   }
2) Student[] stus = new Student[]{
       new Student("zhangsan",25,"LF"),
       new Student("lisi",26,"JMS"),
       new Student("wangwu",24,"SD")
   };

9、继承
  • 作用:代码复用
  • 通过extends来实现继承
  • 超类/父类:派生类所共有的属性和行为
  • 派生类/子类:派生类所特有的属性和行为
  • 派生类及可以访问自己的,也可以访问超类的。而超类只能访问超类自己的
  • 一个超类可以有多个派生类,但一个派生类只能继承一个超类------单一继承
  • 继承具备传递性
  • java规定:构造派生类之前必须先构造超类
1)在派生类的构造方法中,若没有调用超类的构造方法
      -----则编译器默认super()调用超类的无参构造方法
      -----注意:super()调用超类构造方法必须位于派生类构造方法的第一行
2)在派生类的构造方法中,若调用了超类的构造方法
      -----则不再默认提供
10、super:指代当前对象的超类对象

super的用法:

  • super.成员变量名-------------------------访问超类的成员变量
  • super.方法名()-----------------------------调用超类的方法
  • super()---------------------------------------调用超类的构造方法
11、向上造型:
  • 超类型的引用指向派生类的对象
  • 能点出来什么,看引用的类型
12、方法的重写(Override/Overriding):重新写
  • 发生在父子类中,方法名相同,参数列表相同
  • 重写方法被调用时,看对象的类型
  • 遵循"两同两小一大"原则:
    1)两同:
     1.1)方法名相同
     1.2)参数列表相同
    2)两小:
     2.1)派生类方法的返回值类型小于或等于超类方法的
      2.1.1)void时,必须相同
      2.1.2) 基本类型时,必须相同
      2.1.3)引用类型时,小于或等于
     2.2)派生类方法抛出的异常小于或等于超类方法的
    3)一大
     3.1)派生类方法的访问权限大于或等于超类方法的
13:重写与重载的区别:
  • 重写(override/overriding): 发生在父子类中,方法名相同,参数列表相同
  • 重载(overload/overloading):发生在同一类中,方法名相同,参数列表不同
14、Package
  • 作用:避免类的命名冲突
  • 同包中的类不能同名,不同包中的类可以同名
  • 类的全称:包名.类名,包名常常有层次结构
  • 建议:包名所有字母都小写
15、import
  • 同包中的类可以直接访问
  • 不同包中的类不能直接访问,若想访问:
    1)先import声明类再访问类------建议
    2)类的全称----------------------------太繁琐、不建议
16、访问控制修饰符:-------------------保护数据的安全
  • public:公开的,任何类
  • private:私有的,本类
  • protected:受保护的,本类、派生类、同包类
  • 默认的:什么也不写,本类、同包类----------------------java不建议默认权限
  • 说明:
    1)类的访问权限只能是public或默认的
    2)类中成员的访问权限如上四种都可以
17、final:最终的,不可改变的----------------------了解、单独应用几率低
  • 修饰变量:变量不能被改变
  • 修饰方法:方法不能被重写
  • 修饰类:类不能被继承
18、static:静态的
1)静态变量:
  1.1)由static修饰
  1.2)属于类,存储在方法区中,只有一份
  1.3)常常通过类名点来访问
  1.4)何时用:所有对象所共享的数据(图片、音频、视频等)
2)静态方法:
  2.1)由static修饰
  2.2)属于类,存储在方法区中,只有一份
  3.3)常常通过类名点来访问
  2.4)静态方法中没有隐式this传递,所以在静态方法中不能直接访问实例成员
  2.5)何时用:方法的操作与对象无关
3)静态块:
  3.1)由static修饰
  3.2)属于类的,在类被加载期间自动执行,
      因为一个类只被加载一次,所以静态块也只执行一次
  3.3)何时用:加载/初始化静态资源(图片、音频、视频等)
19、static final常量:应用率高
  • 必须声明同时初始化
  • 通过类名点来访问,不能被改变
  • 建议:常量名所有字母都大写,多个单词之间用_分隔
  • 编译器在编译时会将常量直接替换为具体的值,效率高
  • 何时用:数据永远不变,并且经常使用
20、抽象方法
  • 由abstract修饰
  • 包含抽象方法的类必须是抽象类
  • 抽象类不能被实例化(new对象)
  • 抽象类是需要被继承的,派生类:
    1)重写所有抽象方法-----------------变不完整为完整
    2)也声明为抽象类--------------------一般不这么用
  • 抽象类的意义:
    1)封装共有的属性和行为--------------代码复用
    2)为派生类提供统一的类型-----------向上造型
    3)可以包含抽象方法,为所有派生类提供统一的入口(造型后能点出来)
      派生类的行为不同,但入口是一致的
1.问:觉得超类中的抽象方法step()可有可无?
  答:必须有,超类中的抽象方法可以保证,当向上造型时,通过超类的引用能点出          step()来------意义就是保证造型之后能出来
2.问:将step()设计为普通方法,也能点出来,为什么要设计为抽象方法
  答:设计为普通方法时,派生类可以重写也可以不重写,而设计为抽象方法,则可以强      制派生类必须重写-------意义就是抽象方法能达到一种强制重写的目的
21、成员内部类:应用率极低
  • 类中套类,外面的称为外部类,里面的称为内部类
  • 内部类通常只服务于外部类,对外不具备可见性
  • 内部类对象只能在外部类中创建
  • 内部类中可以直接访问外部类的成员(包括私有的)
    内部类中有个隐式的引用指向了创建它的外部类对象
    语法:外部类名.this
问:内部类有独立的.class吗?
答:有
做功能的套路:
1.先写行为/方法:
  1)若为某个类所特有的行为,则将方法设计在特定的类中
  2)若为派生类所共有的行为,则将方法设计在超类中
2.窗口调用:
  1)若为定时发生的,则在定时器中调用
  2)若为事件触发的,则在侦听器中调用
22、接口
  • 是一种数据类型(引用类型)
  • 由interface定义
  • 只能包含常量和抽象方法
  • 接口不能被实例化
  • 接口是需要被实现/继承的,实现类/派生类:必须重写所有抽象方法
  • 一个类可以实现多个接口,用逗号分隔,若又继承又实现时,应先继承后实现
  • 接口可以继承接口
设计规则:
1)将所有派生类所共有的属性和行为,抽到超类中-----------抽共性
2)若派生类的行为都一样,设计为普通方法
  若派生类的行为不一样,设计为抽象方法
3)将部分派生类所共有的属性和行为,抽到接口中
  接口是对继承单根性的扩展-------------------实现多继承
调错技巧:
1.如何锁定错误位置:
  ----将方法的调用代码注释,而后一个一个的放开,看哪个方法放开之后出现的问题
2.如何打桩:
  ----在你认为错误的位置,通过System.out.println()输出数据的值
类和类--------------------继承
接口和接口--------------继承
类和接口-----------------实现
23、多态
  • 意义:
    1)同一类型的引用指向不同的对象时,有不同的实现
    -----行为的多态:cut()、step()、getImage()… 所有抽象方法都是多态的
    2)同一个对象被造型为不同的类型时,有不同的功能
    ------对象的多态:我、你、水…---------------------所有对象都是多态的
  • 向上造型/自动类型转换:
    1)超类型的引用指向派生类的对象
    2)能向上造型成为的类型有:超类+所实现的接口
    3)能点出来什么,看引用的类型
  • 强制类型转换,成功的条件只有如下两种情况:
    1)引用所指向的对象,就是该类型
    2)引用所指向的对象,实现了该接口或继承了该类
  • 强转时若不符合如上两种情况,则发生ClassCastException类型转换异常,建议:在强转之前要先通过instanceof来判断引用的对象是否是该类型
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/886048.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号