3.面向对象篇

面向对象篇

一、面向对象基础

1.概述

Java语言是一种面向对象的程序设计语言,这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。那么,面向对象就是指,把相关的数据和方法组织为一个整体来看待,强调的是通过调用对象的行为来实现功能。

  • 注意:面向过程关注的是执行的过程,面向对象关注的是具备功能的对象。 面向过程到面向对象,是程序员思想上从执行者到指挥者的转变。
2.三个特征
	封装性:所有的内容对外部不可见。
	继承性:将其他的功能继承下来继续发展。
	多态性:方法的重载本身就是一个多态性的体现。
3.类和对象

类:是一组相关属性和行为的集合(任何人都具有人类的特点,比如有手、脚等,这就是属性,人可以吃饭,打游戏,写代码,这就是行为)
属性:就是该事物的状态信息。
行为:就是该事物能够做什么。

  • 类必须通过对象才可以使用,对象的所有操作都在类中定义。
  • 对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性和行为。(就好像作为指挥者,你需要叫军人这个类中的某一位军人去执行相关的任务,同时这位军人具备军人这个类的一切属性和行为)。
4.类与对象的关系

类是对一类事物的描述,是抽象的。
对象是一类事物的实例,是具体的。
类是对象的模板,对象是类的实体。

5.类的定义格式
class 类名称{ 
			成员属性 
			成员方法 
		}

6.属性与方法
属性定义格式:
     数据类型 属性名; 
属性定义并赋值的格式:
     数据类型 属性名 = 初始化值; 
方法定义格式: 
   权限修饰符 返回值类型 方法名(形式参数列表)
 { 
 	//方法体
  	return 返回值; 
  }
创建对象:
		类名 对象名 = new 类名();
使用对象访问类中的成员:
		对象名.成员变量;
	    对象名.成员方法();
7.栈

Java栈的区域很小 , 大概2M左右 , 特点是存取的速度特别快
栈存储的特点是:先进后出
存储的是: ①基本数据类型的数据 ②引用数据类型的引用
例如: int a =10;
Person p = new Person();
那么10存储在栈内存中 , 创建的对象的引用§存在栈内存中。

8.堆

存放的是类的对象 .
所有类的对象都是通过new关键字创建 new关键字, 是指告诉JVM ,
需要明确的去创建一个新的对象 , 去开辟一块新的堆内存空间。

9.方法区

存放的是类信息 、 静态的变量 、常量 、 成员方法

10.方法的重载

方法名称相同, 参数类型或参数长度或参数类型顺序不同, 可以完成方法的重载 。
方法的重载与返回值无关。
方法的重载 ,可以让我们在不同的需求下, 通过传递不同的参数调用方法来完成具体的功能。

二、面向对象进阶

1.封装——private关键字

private的含义

  1. private是一个权限修饰符,代表最小权限。
  2. 可以修饰成员变量和成员方法。
  3. 被private修饰后的成员变量和成员方法,只在本类中才能访问。
格式:
           private 数据类型 变量名 ;
1.代码示例
public class Student { 
		private String name; 
		private int age; 
		}
2.get和set方法
提供 getXxx 方法 / setXxx 方法,可以访问成员变量,代码如下:
public class Student { 
		private String name; 
		private int age; 
		
		public void setName(String n) { 
		 	name = n; 
       }
       	public String getName() {
       		 return name;
       }
       	public void setAge(int a) { 
       		age = a;
       }
       	public int getAge() { 
       		return age; 
       	}
    }
3.封装优化——this关键字

含义:this代表所在类的当前对象的引用(地址值),即对象自己的引用。
(记住 :方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。)

this使用格式:
this.成员变量名;

使用this关键字可以完成以下的操作: ·
1.调用类中的属性 ·
2.调用类中的方法或构造方法 ·
3.表示当前对象

4.封装优化——构造方法

Person p = new Person();
在右侧Person后面出现的小括号, 其实就是在调用构造方法 !
作用:用于对象初始化。
执行时机: 在创建对象时,自动调用

特点:所有的Java类中都会至少存在一个构造方法 如果一个类中没有明确的编写构造方法,则编译器会自动生成一个无参的构造方法, 构造方法中没有任何的代码!如果自行编写了任意一个构造器, 则编译器不会再自动生成无参的构造方法。

定义的格式: 和普通方法一样,区别在于: 方法名称必须与类名相同, 没有返回值类型的声明 !

修饰符 构造方法名(参数列表){ 
// 方法体 
}
public class Solution{ 
	public static void main(String[] args){ 
	Person p = new Person(); 
	p = new Person();
	p = new Person(); 
	p = new Person(); 
} 
}
class Person{ 
		public Person(){
	 System.out.println("对象创建时,此方法调用"); 
	 } 
}
5.关于构造方法
 建议自定义无参构造方法,不要对编译器形成依赖,避免错误发生。 当类中有非常量成员变量时,
建议提供两个版本的构造方法,一个是无参构造方法,一个是全属性做参数的构造方法。当类中所有成
员变量都是常量或者没有成员变量时,建议不提供任何版本的构造。

注意事项 
    1. 如果你不提供构造方法,系统会给出无参数构造方法。
    2. 如果你提供了构造方法,系统将不再提供无参数构造方法。
    3. 构造方法是可以重载的,既可以定义参数,也可以不定义参数
6.封装优化—— static

static表示“静态”的意思,主要作用在于创建独立于具体对象的域变量或者方法。
理解:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了
就可以通过类名去进行访问。 并且不会因为对象的多次创建而在内存中建立多份数据

  • 注意:
    1. 静态成员 在类加载时加载并初始化。
    2. 无论一个类存在多少个对象 , 静态的属性, 永远在内存中只有一份
    3. 在访问时: 静态不能访问非静态 , 非静态可以访问静态 !

三、面向对象高级

1.抽象类

抽象类必须使用abstract class声明 一个抽象类中可以没有抽象方法。抽象方法必须写在抽象类或者接口中。

  • 格式:abstract class 类名{
    // 抽象类
    }

  • 抽象方法:
    只声明而未实现的方法称为抽象方法(未实现指的是:没有“{}”方法体),抽象方法必须使用abstract关 键字声明。

  • 格式:abstract class 类名{
    // 抽象类
    public abstract void 方法名() ; // 抽象方法,只声明而未实现
    }

  • 原则:抽象类本身是不能直接进行实例化操作的。
    1.不能直接使用关键字new完成。
    2.一个抽象类必须被子类所继承,被继承的子类(如果不是抽象类)则必须覆写(重写)抽象类中的全部抽象方法。

2.接口

如果一个类中的全部方法都是抽象方法,全部属性都是全局常量,那么此时就可以将这个类定义成
一个接口。(如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法)

  • 定义格式: interface 接口名称{
    全局常量 ;
    public static final String string = “内容” ;(可省略public static final)
    抽象方法 ;
    public abstract void print() ;(可以省略 public abstract)
    }

  • 注意
    ①接口的实现 implements
    接口实现格式:class 子类 implements 接口1,接口2…{}

    ②一个类即要实现接口,又要继承抽象类格式:
    class 子类 extends 父类 implements 接口1,接口2…{ }
    ③接口因为都是抽象部分, 不存在具体的实现, 所以允许多继承
    interface C extends A,B{ }

3.多态

多态: 是指同一对象,具有多个不同表现形式。

多态的使用格式:
向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。
格式: 父类类型 变量名 = new 子类类型();
如:Animal a = new Cat();

向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。
格式:子类类型 变量名 = (子类类型) 父类变量名;
如:Cat c =(Cat) a;

  • 注意: 方法的重载和重写 也是多态的一种, 不过是方法的多态(相同方法名的多种形态)。
    重载: 一个类中方法的多态性体现
    重写: 子父类中方法的多态性体现。

  • instanceof关键字:避免类型转换异常,判断某个对象是否是指定类的实例。
    格式:实例化对象 instanceof 类 //此操作返回boolean类型的数据

4.Object类

Object类是所有类的父类(基类),如果一个类没有明确的继承某一个具体的类,则将默认继承Object 类。
Object的多态性:使用Object可以接收任意的引用数据类型。
Object.toString方法。 作用:返回对象的字符串表示形式。( 返回对象的内存地址)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值