面向对象总结

面向对象简单理解定义

面向:找、拿

对象:能干活的东西

面向对象:拿东西解决对应的问题

//例如:
//监听控制台输出的呢内容,并且获取到相应的内容
Scanner sc=new Scanner(System.in);
//获取内容
String name=sc.nextLine();

面向对象符合人类的思维习惯,使编程更简单

要求:学会设计并使用

学会获取并使用

面向对象01

一、类的定义和对象的创建

1.类:

是现实世界中实体的抽象,是对一类事物的描述;在软件设计中,类是一个模板,是一个设计图,它定义了此种类通用的属性(变量)和行为(方法)。

  • 类是共同特征的描述

2.对象:

是真实存在的具体东西。在java中,必须先设计类,才能获得对象

3.如何定义类

public class 类名{
    1.成员变量(代表属性,一般是名词)
    2.成员方法(代表行为,一般是动词)
        public void Method(){
        }
        可以有返回值,也可以无返回值
    3.构造器
    4.代码块
    5.内部类
}

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

4.访问修饰符

控制被修饰变量或方法的访问权限

5.定义类的补充事项

  • 类名首字母大写,驼峰

  • 一个java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名

  • 实际开发中建议还是一个文件定义一个class类成员

  • 变量的完整定义格式是:数据类型 变量名称=初始化值;一般无需指定初始化值,存在默认值(成员变量未赋初值)

  • 默认值:整数类型->0

    小数类型->0.0

    布尔类型->false

    引用类型->null

6.练习(登录页面,考试系统(增删改查))

二、方法的定义和方法的获取

1.方法(method)

对象的行为

  • 无参无返回值

访问修饰符 void 方法名称(){
    无参无返回值
}
  • 无参有返回值

访问修饰符 返回值类型 方法名称(){
    return值;//值类型必须与返回类型一致
}
  • 有参有返回值

访问修饰符 返回值类型 方法名称(参数类型 参数名){
    return值;//值类型必须与返回类型一致
}
  • 有参有返回值(多参数)

访问修饰符 返回值类型 方法名称(参数类型 参数名,参数类型 参数名2){
    return值;//值类型必须与返回类型一致
}

2.方法的调用

psvm {
    对象.方法();
    对象.方法(参数值);
    返回值类型 返回值=对象.方法(参数值);
}

三、方法的通用格式

public 返回值类型 方法名(参数) {
       方法体; 
      return 数据;
}

方法的通用格式:

  • public 修饰符,目前先记住这个格式

  • 返回值类型 方法操作完毕之后返回的数据的数据类型如果方法操作完毕,没有数据返回,这里写void,而且方法体中一般不写return

  • 方法名 调用方法时候使用的标识

  • 参数 由数据类型和变量名组成,多个参数之间用逗号隔开

  • 方法体 完成功能的代码块

  • return 如果方法操作完毕,有数据返回,用于把数据返回给调用者

四、方法重载(重点)

1.定义

方法重载至同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载

  • 多个方法在统一个类中

  • 多个方法具有相同的方法名

  • 多个方法的参数不相同或者类型不同或者数量不同

2.特点

  • 类型不同或者数量不同重载仅对应方法的定义,与方法的调用无关

  • 重载仅针对同一个类中方法的名称与参数进行书别,与返回值无关(不能通过返回值来判定两个方法是否相互构成重载)

五、方法的注意事项

  • 方法不能嵌套定义

  • void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据


面向对象02

一、对象内存图

1.java内存分配

栈:所有局部变量都会在占内存中创建

  • 局部变量:定义在方法中的变量或者方法声明上的变量

  • 方法执行会加载到栈中进行

  • 局部变量特点:随着方法的调用而存在,随着方法的调用完毕而消失

Student s = new Student();
  • 堆:所有对象及其对应的实例变量和数组都将存储在此处

  • 简单理解为:new出来的东西,都存储在堆内存

  • 每一个new出来的东西都有一个地址值,使用完毕,会在垃圾回收器

  • 空闲时被回收实例变量(成员变量)有初始化值:

基本数据类型:整数:0,浮点数:0.0,布尔:false,字符:空字符

引用数据类型:null

2.多个引用可以指向同一个对象

public class StudentTest03 {
	public static void main(String[] args) {      
    	//创建第一个对象并使用        
    	Student s1 = new Student();        
    	s1.name = "林青霞";        
    	s1.age = 30;        
    	System.out.println(s1.name + "," + s1.age);        
    	
    	//把第一个对象的地址赋值给第二个对象        
    	Student s2 = s1;        
    	s2.name = "张曼玉";        
    	s2.age = 28;        
    	System.out.println(s1.name + "," + s1.age);
        System.out.println(s2.name + "," + s2.age);    
     }
}

二、private

  • 是一个权限修饰符

  • 可以修饰成员(成员变量和成员方法)

  • 作用是保护成员不被别的类使用,被 private 修饰的成员只在本类中才能访问针对 private 修饰的成员变量,如果需要被其他类使用,提供两个相应的操作:

  • 提供“get变量名()”方法,用于获取成员变量的值,方法用 public 修饰

  • 提供“set变量名(参数)”方法,用于设置成员变量的值,方法用 public 修饰

三、this

  • this限定的变量用于代指成员变量

  • this解决局部变量隐藏成员变量

四、封装

1.概述

是面向对象的三大特征之一

2.原则

将类的某些信息隐藏在类内部private,不允许外部程序直接访问,只能通过get、set方法实现

3.好处

通过方法控制成员变量的操作,提高安全性

把代码用方法进行封装,提高代码的复用性

五、构造方法

1.格式

特殊的方法

//格式:
public class 类名{
	修饰符 类名(参数){
	}
}

创建对象时执行了构造方法:空参构造,有参构造;

2.构造方法的创建

如果没有定义构造方法,系统将给出一个默认的无参数构造方法如果定义了构造方法,系统将不再提供默认的构造方法

3.构造方法的重载

如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法

4.推荐的使用方式

永远提供无参数构造方法

Day06面向对象(高级)

一、继承

1.定义

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。

继承就是子类继承父类的属性和行为(成员变量和成员方法),使得子类对象具有与父类相同的属性、相同的行为。

  • 子类可以直接访问父类中的非私有的属性和行为

  • 继承是单继承

  • 类与类之间产生了关系,是多态的前提

  • 父类的成员方法,实际上就是去定义,子类当中通用的功能

  • 其实在子类构造方法的第一行,隐式调用了父类中的构造方法super();而且只在第一行

2.格式

class 父类 {
...
}
class 子类 extends 父类 {
...
}

3.方法的重写(重点)

子类当中定义和父类相同方法名字的方法,称为方法的重写

  • 在子类和父类中,不在同一个类中

  • 方法的名字一样

  • 参数一样

4.方法重载(重点)

  • 同一个类中

  • 方法的名字一样

  • 方法的参数不一样(数量不一样、类型不一样、顺序不一样)

二、修饰符

1.权限修饰符

private        同一个类中

default        同一个类中 同一个包中子类无关类

protected        同一个类中 同一个包中子类无关类 不同包的子类

public         同一个类中 同一个包中子类无关类 不同包的子类 不同包的无关类

2.状态修饰符

static

(1)含义

关键字是静态的意思,可以修饰成员方法,成员变量

static静态修饰为所有对象使用

(2)特点

被类的所有对象共享,这也是判断是否使用静态关键字的条件

可以通过类名调用,当然也可以通过对象名调用,推荐使用类名调用

(3)访问特点

非静态的成员方法

  • 能访问静态的成员变量

  • 能访问非静态的成员变量

  • 能访问静态的成员方法

  • 能访问非静态的成员方法

静态的成员方法

  • 能访问静态的成员变量

  • 能访问静态的成员方法

总结成一句话就是:静态成员方法只能访问静态成员

final

(1)含义

final 关键字是最终的意思,可以修饰成员方法,成员变量,类

(2)final 修饰的特点

  • 修饰方法:表明该方法是最终方法,不能被重写

  • 修饰变量:表明该变量是常量,不能再次被赋值

  • 修饰类:表明该类是最终类,不能被继承

(3)final 修饰局部变量

  • 变量是基本类型:final 修饰指的是基本类型的数据值不能发生改变

  • 变量是引用类型:final 修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的

三、包

四、抽象类

1.定义

一种特殊的父类里面可以写抽象方法

2.格式

方法

访问修饰符 abstract 返回值类型 方法();(没有方法体)

访问修饰符 abstract class 类名{}

注意

  • 在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类(因果关系)

  • 抽象方法无法实例化 ---无法通过new去创建自身的对象的【new 构造方法】

  • 存在构造方法 ---交给子类通过super进行访问的

  • 抽象类中可以存在普通方法 ---让子类继承并且使用

  • 抽象类的子类 ---要么重写抽象类的所有方法 ---要么也是一个抽象类

3.Abstract关键字冲突

  • final:被abstract修饰的方法,强制要求重写子类,被final修饰的方法子类不能重写

  • private:被abstract修饰的方法,强制要求重写子类,被private修饰的方法子类不能重写

  • static:被static修饰的方法可以直接类名调用,类名调用抽象方法没有意义

五、接口

1.概述

  • 接口体现的思想就是对规则的声明

  • Java中的接口更多的体现在对行为的抽象

  • 接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用

2.语法

//接口用关键字interface修饰
public interface 接口名 {
    public abstract 返回值类型 方法();
    …
} 

实现

1.public class 类名 implements 接口{
        重写方法;
    }
2.创建一个抽象类

3.接口特点

不能直接实例化【new出来】=>如果能new,就可以直接通过对象变量调用方法,毫无意义

4.接口成员特点

  • 构造方法 : 没有,因为接口主要是扩展功能的,而没有具体实例。

  • 成员变量 : 只能是常量 默认修饰符:public static final

  • 成员方法 : 只能是抽象方法 默认修饰符:public abstract

5.类和接口的关系

  • 类和类的关系

继承关系,只能单继承,但是可以多层继承

  • 类和接口的关系

实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口

  • 接口和接口的关系

继承关系,可以单继承,也可以多继承

6.抽象类和接口的区别

成员区别

抽象类 :变量,常量;有构造方法;有抽象方法,也有非抽象方法

接口 : 常量;抽象方法

关系区别

类与类 继承,单继承

类与接口 实现,可以单实现,也可以多实现

接口与接口 继承,单继承,多继承

设计理念区别

抽象类 对类抽象,包括属性、行为

接口 对行为抽象,主要是行为,目的是制定规范

六、多态

1.概述

指的是同一个对象,在不同时刻表现出来的多种形态多态的前提和体现

  • 有继承/实现关系

  • 有方法重写

  • 有父类引用指向子类对象

对象多态:方法的形参定义为父亲类型,这个元素就可以接受该父类的任意子类对象了

行为多态:同一个方法,具有多种不同的表现,或形态能力

2.多态中成员访问特点(重点)

成员变量

编译看左边,执行看左边

成员方法

编译看左边,执行看右边

原因

因为成员方法有重写,而成员变量没有

3.多态中的转型

  • 向上转型

从子到父

父类引用指向子类对象

  • 向下转型(强制转型)

从父到子

父类引用转为子类对象

注意:如果被转型的引用类型变量,对应的实际类型和目标类型不是同一种类型,那么在转换的时候就会出现ClassCastException

对象名 instanceof 类型
//判断一个对象是否是一个类的实例
//    通俗理解:判断关键字的左边的对象,是否是右边的类型,返回boolean类型结果

七、代码块

使用{}括起来的代码被称为代码块

1.局部代码块

位置:方法中定义

作用:限定变量的生命周期,及早释放,提高内存利用率构

2.构造代码块

位置:类中方法外定义

特点:每次构造方法执行的时候,都会执行该代码块中的代码,并且在构造方法执行前执行作用:将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性

3.静态代码块

位置:类中方法外定义

特点:需要通过static关键字修饰,随着类的加载而加载,并且只执行一次作用:在类加载的时候做一些数据初始化的操作

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值