Java-面向对象

1.抽象数据类型

1.1 基本概念

  • 面向对象:面向对象是一种基于对象概念的软件开发方法,是目前软件开发的主流方法。

  • 面向对象的三大特性:封装、继承、多态。

  • 对象:真实存在的具体的个体。在面向对象的世界中认为万物皆可对象。

  • 类:类是具有相同的状态和相同的行为的一组对象的集合。

  • 类和对象的关系:类和对象的关系就是抽象和具体的关系,类是多个对象进行综合抽象的结果,是实体对象的概念模型,而一个对象时一个类的实例

1.2 定义类

​ 定义类的语法结构如下:

[访问修饰符] class 类名{
    成员变量声明;//即字段
    成员方法声明;//即行为
}

//示例
public class Person{
    //省略具体代码
}

语法解析:

(1)访问修饰符如:publicprivateprotected等都是可选的。

(2)class是声明类的关键字。

(3)按照命名规范,应使用帕斯卡命名法,因此类首字母应该大写。

  • 定义类就是定义了一个新的数据类型,这个数据类型的名称就是类名。

​ 类的内部包含字段和方法。对象所拥有的特征在类中表示时称为类的字段,字段使用变量表示。

​ 定义字段的语法格式如下:

[访问修饰符] 数据类型 字段名;
//示例:
pubilc class student{
  	String name;   //定义姓名字段
	int age;       //定义年龄字段
	String gender; //定义性别字段

}

语法解析:

(1)访问修饰符是可选的。

(2)除了访问修饰符外,其他部分与定义变量相同。

​ 类的方法

​ 对对象执行操作的行为称为类的方法。

示例:

public class student{
    String name;
    int age;
    String grader;
    
    public void study(){
        System.out.println(this.name + "的学习挺好");
    }
}
1.2.2 初始化
  • 静态初始化:static
  • 实例初始化

初始化的顺序:

  1. 第一次使用时,先加载类进行静态初始化。
  2. 每次实例初始化先执行实例初始化,再执行构造。

成员变量与局部变量的区别

  • 作用域不同。局部变量的作用域仅限定于定义它的方法,在该方法外无法被访问。成员变量的作用域是在整个类内,所有的成员方法都可以使用它。如果访问权限允许,还可以在类外部使用成员变量。
  • 初始值不同。对于成员变量,如果在类定义中没有给它赋予初始值,Java会给它赋一个默认值,byte、short、int、long类型的默认值是0boolean类型的默认值是falsechar类型的默认值是'\u0000'(空字符),float、double类型的默认值是0.0引用类型的默认值是null。但是java不会给局部变量赋初始值,因此局部变量在使用前必须初始化。
1.2.3 构造函数
  • 在设计一个类时,如果不写构造器,Java会自动生成一个无参数构造。
  • 构造方法是一种特殊的实例方法,创建对象时会自动被调用,可以用来初始化类(实例成员)。

1.3创建对象和使用

1.3.1 创建对象

​ 类是一类事务的集合和抽象,代表着这类事务共有的字段和行为。一个对象称为类的一个实例,是类一次实例化的结果。

​ 类的对象可以调用类中的成员,如调用类的字段、调用类的方法等。

​ 创建对象的语法格式如下:

类名 对象名 = new 类名();

//示例
Persion xm = new Person();

语法解析如下:

  • new是关键字,称为实例化。
  • 左边的类名称为对象的数据类型。
  • 右边的类名()称为类的构造方法。

创建对象就是定义了一个新的变量,变量名就是对项目,变量的类型就是被实例化的类。

1.3.2 使用对象

​ 在Java中,要使用对象的字段和方法,需要使用成员运算符“ . ”。

使用对象的语法格式如下:

对象名.属性;     //引用对象的字段
对象名.方法();     //引用对象的方法
  • static表示静态的,可以修饰字段和方法,被static修饰的字段或方法属于类。通过类名调用。也可以被对象调用。
  • 没有static修饰符的属于对象,通过对象调用,static修饰的属于对象,通过对象调用。
  • static成员可以相互调用,non-static/instance(实例)可以相互相互调用,也可以调用static的。
  • static属于类,多个成员共享。

继承

如何继承

继承是Java中实现代码重用的重要手段之一。Java中只支持单继承,即一个类只能有一个直接父类,Object类是所有类的父类。

类那些中能继承?哪些不能继承?
  • 可以继承可见的成员
  • 不能继承 private/构造/static初始化器/实例初始化器
实例化顺序

在实例化子类时,会首先实例化其父类,然后再实例化子类。

super 和 this的区别

1.this表示当前对象,super表示父类对象
2.this可以解决遮蔽,super解决隐藏
3.this调用属性和方法时,没有可以调用父类的;
super调用父类的属性和方法。
4. this可以在任何类中使用,super出现在子类中
5. 在实例方法,构造方法,和初始化器中使用
6. 在构造方法中,只能出现在第一行,不可以同时出现

重载和重写的区别

重载:
重载是在同一类中,方法名相同,参数不同(顺序,个数,类型)
重载是编译时多态
重写:
重写表示方法名相同,参数列表相同,返回值类型相同,访问修饰符相同或变大,抛出异常相同或缩小(在继承关系中)。
重写是运行时多态

遮蔽和隐藏

遮蔽:
指在一个作用域中使用了一个和外层作用域相同的变量名,导致内部变量“遮蔽”了外部变量,即无法直接访问外部变量。
隐藏:
父类和子类拥有相同名字的属性或方法(方法隐藏只有一种形式,就是子类和父类存在签名相同的静态方法)时,父类同名的属性或方法形式上看不见,实际上还是存在的

子类有和父类同名的static方法,子类的方法会隐藏父类的方法,只能是子类的static方法隐藏父类的static方法

final
  • final 修饰类,称为不可继承类,表示该类不可被其它类继承
  • final 修饰的方法,称为不可覆盖方法,子类无法重写该方法
  • final 修饰的变量,称为常量一旦被初始化,就无法被修改。常量必须在声明时或在构造方法中初始化。常量的命名一般采用大写字母和下划线。
Object

JLS-Object

  • toString
  • finalize JDK 9 开始,弃用
  • getClass
  • hashCode
  • equals 【了解干嘛的】
  • clone 浅拷贝[实现 Cloneable 接口]
对象数组的使用

使用对象作为方法的参数

向上转型,自动转换(继承关系在)

向下转型,强制类型转换(instanceof)。 是同一个类型

  • instanceof 要有继承关系才能判断
多态
  • 什么是多态
  • 重写是基础,重写是运行时多态
  • 重载是编译时多态

在对象做为参数或返回值时有了更多的可能 父类类型可以出现的地方,子类一定可以出现

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值