3. Java面向对象编程


类与对象[1]

  • Java是面向对象的
    • 汇编语言(面向机器)—— c语言(面向过程)—— java语言(面向对象)
  • 类和对象的关系
    • 类是抽象的,代表一类事物,比如人类,猫类...
    • 对象是具体的,代表一个具体事物
      类是对象的模板,对象是类的一个个体,实例
    A[把猫的特征提取出来] --> B[猫类]
    B --> C[对象/实例]
    B --> D[对象/实例]
    B --> E[...]

定义类

package包名;
class类名 extends父类 implements接口名{
    成员变量;
    构造方法;
    成员方法;
}

成员变量

成员变量是类的一个组成部分,一般是基本数据类型,也可是是引用类型

创建对象

  • 先声明再创建
    • 对象申明:类名 对象名
    • 对象创建:对象名=new 类名()
  • 一步到位法
    • 对象名=new 类名()

访问对象的成员变量

对象名.变量名;

成员方法

  • 介绍
    • 比如人类,除了有一些属性外(成员变量表示的 年龄,姓名...),还有一些行为,如说话,跑步...,通过学习还会做算术题
  • 成员方法/函数--定义
    • 参数列表:表示成员函数输入
    • 数据类型(返回类型):表示成员函数输出
    • 函数主体:表示为了实现某一功能代码块
public 返回数据类型 方法名(参数列表)
{
      语句;//方法(函数)主体
}
  • 成员方法--申明
public       int         test(int a);
//访问修饰符  数据类型  函数名(参数列表);

构造方法

  • 特点
    • 方法名和类名相同
    • 没有返回值
    • 创建一个类的新对象时,系统会自动调用该类的构造方法,完成对新对象的初始化
    • 一个类可以有多个构造方法
  • 默认构造方法
    • 如果没写,系统默认 public Person(){}
  • This
    • this是属于对象的,不是属于类的

静态变量与静态方法

静态变量

  • 定义语法
访问修饰符 static 数据类型 变量名;
//static表示静态变量,因此它可以被任何一个对象访问 

2)访问类变量

类名.类变量名
//或者
对象名.类变量名

静态方法

  • 定义语法:
访问修饰符 static 数据返回类型 方法名(){}
  • 访问类方法:
类名.类方法名
//或者
对象名.类方法名
  • java规则:
    • 静态变量原则上用静态方法去访问
    • 静态方法只能访问静态变量
    • 非静态方法,既能访问静态变量,也能访问实例变量
  • 总结:
    • 静态变量是与类相关的,公共的属性
    • 实例变量是属于每个对象个体的属性

四大特征

1. 抽象(可以不考虑)

定义一个类时,将一类事物的共同属性和行为提取出来,形成一个物理模型,这种研究方法称为抽象

2. 封装

将抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法),才能对数据进行操作

  • 访问控制修饰符
    • 公开级别,public,对外公开
    • 受保护级别,protected,对子类和同一个包中的类公开
    • 默认级别,无修饰符,向同一个包的类公开
    • 私有级别,private,只有类本身可以访问,不对外公开
访问级别 访问控制修饰符 同类 同包 子类 不同包
公开 public
受保护 protected
默认
私有 private
    • 三大作用
      • 区分相同名字的类
      • 管理类
      • 控制访问范围
    • 打包命令
      • package com.xiaoming
      • 命名规范: 小写字母

3. 继承

解决代码复用:在父类中定义相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需通过extends语句来声明继承
class 子类 extends父类
这样子类就会自动拥有父类定义的部分属性和方法

  • 注意事项
    • 除了 private属性/方法,其他3类的属性/方法都能被继承
    • 一个子类只能继承一个父类
    • Java所有类都是object的子类
    • JDK6中有202个包,3777个类、借口、异常、枚举、注释和错误
    • 多查jdk帮助文档
  • 方法重载(overload)
    • 方法名相同
    • 方法的参数类型,个数,顺序至少有一项不同
    • 如果只是返回类型不同,不能构成重载
    • 如果只是控制访问修饰符号不一样,不能构成重载.
  • 方法覆盖(override)
    • 子类的有一个方法,和父类的某个方法的名称、返回类型、参数一样,则称子类的这个方法覆盖了父类的那个方法
    • 访问权限只能:子类>=父类

4. 多态

一个引用(类型)在不同情况下的多种状态。
继承是多态得以实现的基础

  • 注意事项
    • Java允许父类的引用变量引用它子类的实例(对象) Animal animal=new Cat(); 这种转换时自动完成的
    • 好处:消除了类之间的耦合关系,使程序更容易扩展(见E:\Java\Homework\接口_卖汽车.txt)
      • 新增一种类型汽车的销售,只需让新定义的类实现Car并实现它的所有方法,无需对原有代码做任何修改。CarShop类的sellCar(Car car)方法可以自动处理新的车型

抽象类

当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]

  • 注意事项
    • 抽象类不能被实例化
    • 抽象类不一定要包含abstract方法,即可以有实现了的方法
    • 一旦某个类包含了abstract方法,这个类必须声明为abstract
    • 抽象方法不能有主体:abstract void aaa( );

接口

接口就是给出一些没有内容的方法,封装到一起,到某个类要使用的时候,再根据具体情况把这些方法写出来

Class 类名 implements 接口
{
      方法;
      变量;
}
  • 注意事项
    • 接口不能被实例化
    • 接口中的所有方法都不能有主体(可以理解为:接口是更抽象的抽象类) void aaa();
    • 一个类可以实现多个接口
    • 接口中可以有变量(但变量不能用private和protected修饰)
      • 接口中的变量,本质是static,而且是final,不管你加不加static修饰
      • 在java开发中,我们经常把常用的变量,定义在接口中,作为全局变量使用。访问形式:接口名.变量名
      • 一个接口不能继承其他的类,但是可以继承别的接口
  • 实现接口vs 继承类
    • 单继承:保证类的纯洁性
      • 实现接口可以看作是对继承的一种补充
    • 继承是层级式,不灵活
      • 实现接口可以对某个类功能扩展,非常灵活

绑定

将一个方法调用同这个方法所属的主体(也就是对象或类)关联起来叫做绑定,分前期绑定和后期绑定

  • 前期绑定
    • 在程序运行之前就已经绑定,由编译器和连接程序实现,又叫做静态绑定。比如static方法和final方法。注意!这里也包括private方法。因为它是隐式final的
  • 后期绑定
    • 在运行时根据对象的类型进行绑定,由方法调用机制实现,因此又叫做动态绑定,或者运行时绑定。

final

  • 作用:final可以修饰变量或者方法
    • 当不希望父类的某个方法被子类覆盖(override)时,可以用那个final关键字来修饰(见com.test2.Demo5.java)
    • 当不希望类的某个变量的值被修改,也可用final修饰。如果一个变量是final的,则必须赋初值
    • 当不希望类被继承时,可用final修饰
  • 规范:fianl用下划线命名
  • 注意事项
    • final修饰的变量又叫常量。一般用xx_xx_xx来命名
    • 如果一个变量是final的,则必须赋初值

  1. 持续更新中~笔记记录自韩顺平Java网课

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 面向对象笔记 一、 对象在内存中的存放方法以及被调用过程 class文件首先被加载到方法区中的class文件内容区...
    VictorBXv阅读 546评论 0 2
  • 1 面向对象No6 面向对象 OO Object Oriented 编程时以对象为单元,封装数据和逻辑,以此提...
    征程_Journey阅读 1,248评论 0 2
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 1,261评论 0 5
  • Java OOP 什么是面向对象思想? 把一组数据和处理他们的方法组成对象(object),把相同行为的对象归纳为...
    chonglingliu阅读 868评论 0 1
  • 晚上两个舅娘到我家住,说了很多我外婆的是非,她们把很多责任都算到外婆身上,外公在生病的时候,也没有好好照顾好他,乱...
    何德胜觉悟阅读 154评论 9 3

友情链接更多精彩内容