有关类的基本概念

组成

成员变量

//成员变量与局部变量的不同

  • 声明位置不同
    前者在类中,方法外. 后者在定义方法时,或者方法体内
  • 内存位置不同
    前者在堆中,与对象有关, 后者在栈中,与方法有关.
  • 初始化不同
    前者在创建对象时可以不用初始化,后面通过地址值赋值. 后者在使用前必须初始化.
  • 生命周期不同
    前者随着对象的创建而存在,空闲时被垃圾回收器处理. 后者随着方法的结束而消失

/成员变量与静态变量的不同

  • 内存位置不同
    前者随着对象创建存储在堆中,后者随着类的加载存储在方法区中
  • 访问方式不同
    前者根据地址值指向堆中进行访问,后者根据堆中的静态标记指向方法区. 前者多个对象的值可以不同,后者有一个对象改变其值,其他对象指向的值也随着改变
  • 生命周期不同
    前者随着对象的创建而存在,被垃圾回收器回收. 后者随着类的加载且只加载一次

//父类成员变量与子类成员变量还有局部变量名
//访问顺序如下

  • 寻找栈中的局部变量,如果无
    • 寻找堆中子类的成员变量,如果无
    • 寻找判断父类中是否有该成员变量名

如果父类成员变量与子类成员变量还有局部变量名相同
//就需要区分访问

this.xxx
super.xxx

构造方法

//无参构造

public 类名{}       //jvm默认提供,如果有了有参构造则不提供.  故需要显示写出

//有参构造

public 类名(String name,int age){
	this.name = name;       //当局部变量与成员变量相同,需要用this区分
	this.age = age;  
}

成员方法

//get与set方法
(私有化成员变量,需要提供公开的属性赋值访问方法)
(Alt + Fn + Insert)

public void setName(String name){
	this.name = name;
}
public String getName(){
	return name;            //一般由子类调用,因为本类可以直接访问,不同调用该方法
}

//方法

public void method(){
	System.out.println(age);	
}
public String method(){
	return name;
}

代码块

  • 静态代码块 > 构造代码块 > 构造方法
  • 父类静态代码块 > 子类静态代码块 > 父类构造代码块 > 父类构造方法 > 子类构造代码块 > 子类构造方法

// 静态代码块随着类的加载而加载

static {}

// 构造代码块执行构造方法前(每一次new对象)执行,,
可以对类成员进行初始化

class Demo{
	{
		name = "damary";
	}
}

// 方法中使用限定局部变量的生命周期

public void method(){
	//方法体
	{
		按照顺序执行,无特殊优先级
	}
}

特征

封装

  • 私有化成员变量,只通过公共方法对其进行访问调用
    保证安全性
  • 也可以对方法进行封装私有化,然后通过该类中的公共方法调用该私有化方法

继承:is a

子类继承父类[实现接口]后,
重写后的方法修饰权限必须>=父类方法

  • 作用

    保证代码复用性,后期便于维护代码

  • 特点

    • 单继承
    • 多层继承
    • 所有的类默认继承object类
  • 成员变量(可以通过super,this区分调用)

    • 父类的非私有成员变量,子类直接继承
      • 父子类无重名,子类可以直接访问该变量.
      • 如果与子类重名,通过this.xxx与super.xxx区分
    • 父类的私有化成员变量通过get与set公共方法来访问
  • 构造方法
    每一个类都必须写自己的构造方法,无法继承

    • 默认先走父类的无参构造(如果没有就会报错,所以父类无参构造必须写出来)
    • 如果子类构造方法第一句指明super(xxx)[this(xxx)] (如果走this(xxx), 则必须保证子类有参构造初始化完成父类构造方法) 则根据指明的先走,走完然后对子类属性进行初始化,最后走子类构造方法中剩下的语句

    //一般代码习惯

    class Zi extends Fu{
    	public Zi(){}       //子无参调用父无参(系统默认产生)
    	public Fu(String name,int age,char sex){
    		super(name,age);    //子有参调用父有参
    		this.sex = sxe;
    	}
    }
    
  • 成员方法
    (不能通过this,super区分调用,只能有一个入口)

    • 父类的方法不重名,直接继承
    • 重写方法
      (方法名,参数列表,返回类型必须一毛一样,不一样会报错)该方法,通过子类对象调用该方法表现子类方法
      • 需要调用父类方法,则加入super.method()
  • 方法重写与方法重载 ~~ 雷峰塔与雷锋

    • 重写:继承关系中,方法名,参数列表,返回值必须完全一样
    • 重载:方法名一样,和参数列表,返回值无关.
      保证方法扩展性,一个方法可以有不同的参数列表

多态

  • 前提

    继承
    方法重写
    父类引用指向子类对象

  • 格式
    Animal  cat = new Cat();
    
  • 访问特点

    子类伪装成父类

    • 成员变量表现的是父类
    • 但是一旦运行重写后的方法,表现的是子类
    • 不能访问子类独有的方法. 需要通过向下转型
  • 异常

    ClassCastException (类转换异常)
    无继承关系的两个类进行多态格式,虽然编译时不报错,运行就会抛出异常

  • 作用

    一个方法传递的参数为父类,其子类通过多态依然可以被这个方法调用. 但是在运行时,子类表现的是其重写后的方法

  • 接口多态
    • 格式
      JumpI  cat = new Cat();
      

关键字

super 与 this

  • super
     super.变量名         //当子类与父类变量重名,通过super可以访问父类变量名,与子类进行区分
     super()                    //父类无参构造
     super(name,age)      //父类有参构造
     super.method()         //重写方法后,需要在方法体中沿用父类方法体
    
  • this
    当前对象值地址的引用
    - 用在构造方法中:用于区分成员变量与局部变量
    - 当变量名与父类变量名重名,区分子父类的变量名
    

static

  • 特点
    • 共享的
    • 随着类的加载而加载
    • 不能和this共用
    • 静态方法只能访问静态方法,静态成员变量 非静态方法既能访问静态也能访问非静态
  • 访问过程
    • 推荐类名直接访问
    • 随着类被加载在方法区初始值为null或者其他各类型初始值,静态成员由创建对象的静态标记指向来访问.
      对象间对静态成员变量的修改会互相影响
  • 用途:一般为工具类

    私有化构造方法直接使用类方法,此时类需要被标记为静态类

final

最终的,无法被更改的,一般和static一起使用

//修饰类,表示类无法被继承
public final Student {
	final CONSTANT = 3;  //final修饰变量,变量为常量,且必须要初始化.
	public final void method(){
		//修饰方法:该方法不能被重写
		//保证父类方法的安全性
	} 
}
//a为基本类型,其值无法改变
public static final int a = 9;

//a为引用类型,其地址值无法改变,但是值可以变
public static final Integer a = new Integer(10);  

abstract

  • 定义
    • 只能用来修饰类,方法
    • 格式
      //抽象方法无大括号
      public abstract void method();
      
  • 特点
    • 有抽象方法一定是抽象类,是抽象类不一定有抽象方法
    • 抽象类不能被实例化
    • 其子类可以是抽象类也可以非抽象类,但子类中一定要有具体类
    • 子类必须重写抽象方法
    • 冲突词
      • final:抽象方法必须要被继承来重写抽象方法.final不能被继承,冲突!
      • static: 抽象类中的抽象方法无方法体,故不能通过类名直接访问,冲突!
      • private:抽象类的方法必须要被子类继承重写,私有化后则无法重写.冲突!
  • 抽象类多态

    通过多态方式来实例化具体类,达到访问抽象类属性的目的.

interface:like a

比抽象类还抽象

  • 定义
    • 满足一定条件才具备的某种额外的功能
    • 没有构造方法
      interface Jump{
      	//成员变量是static final
      	[public static final]  成员变量;
      
      	//方法必须是抽象的
      	[public abstract] void jump();
      }
      
  • 特点
    • 方法只能是抽象方法 //要被重写
    • 静态常量 //只能访问不能修改
    • 多继承

instanceof

判断对象类型是否为指定数据类型

Dog a = new Dog(); 
//如果a是B的子类[`继承与实现`],那么结果为true
if(a instanceof B){}
else{}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值