面向对象(二)

1. This

1.1. 概念

This : 是对象中第一个成员变量 , 保存了当前对象的内=内存地址

this只能出现在成员方法中 , 不能出现在静态方法中 , 在成员方法中, 谁调用的这个成员方法 , this就代表谁

1.2. 作用

this的作用 :

1 当他用在成员方法或者构造方法中时 , 用来区分同名的成员变量和局部变量

(局部变量和静态变量可以重名 用类名来区分)

(静态变量和成员变量 不可以同名 使用this 区分同名的局部变量和成员变量)

2 当用在构造方法中时 , 用于重载调用当前类中其他的构造方法

3 返回this, 用于链式调用

1.3. this的用法

1.3.1. 区分成员变量和局部变量

public class User {
	private String username;
	private String password;
	
	//成员方法中用来区分成员变量和局部变量
    
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	//构造方法中用来区分成员变量和局部变量
    
	public User(String username, String password) {
		super();
		this.username = username;
		this.password = password;
	}
	
}

1.3.2. 重载调用构造方法

class MyDate{
	//创建私有变量年月日
	private int y;
	private int m;
	private int d;
	
	//需求 : 当不输入年月日的时候 默认为1970-1-1
	public MyDate() {
		//调用当前类中的有参构造,该用法必须在构造方法的第一行
		this(1970, 1, 1);
	}
	


	public MyDate(int y, int m, int d) {
		this.y = y;
		this.m = m;
		this.d = d;
	}
	public void print() {
		System.out.println(y+"-"+m+"-"+d);
	}
}

1.3.3. 链式调用

public class This_02 {
	public static void main(String[] args) {
		This_02 t1 = new This_02();
		User user = new User();
		This_02 t2 = t1.m1();
		This_02 t3 = t2.m2();
		This_02 t4 = t3.m4();
		
		//链式调用
		//原理 : 方法返回值,调用下一个方法的应用
		t1.m1().m2().m4().m4();
		
		
	}
	public This_02 m1() {
		return this;
	}
	public This_02 m2() {
		return this;
	}
	public This_02 m3() {
		return this;
	}
	public This_02 m4() {
		return this;
	}
}

1.4. 注意事项

this不能出现在静态方法中

会报错提示无法从静态上下文中引用非静态变量 this

2. 静态的static

2.1. static概念

static : 修饰符 , 用来标注静态属性 , 如果没有使用static , 则为成员属性

2.2. static作用

功能 :

1 静态变量 : 在类体中使用static修饰的变量是静态变量

2 静态方法 : shiyongstatic修饰的方法是静态方法

3 静态语句块 : shiyongstatic修饰的语句块是静态语句块

2.3. 静态语句块

语句块 : 一个大括号就是一个语句块 : { } 可以理解为没有名字、返回值和修饰的方法

静态语句块 : 用static修饰的大括号 static { } 不能调用 , 在程序加载的时自动调用 , 并且只执行一次(执行顺序在main方法之前 , 在类加载时就会加载静态属性)

所有的静态属性都是在加载时进行的初始化

访问一个类的静态属性的时候 , 会加载该类到内存中

由于在整个程序生命周期中 , 类只会加载一次 , 所以静态语句块只会执行一次 , 并且在最开始执行 , 所以适合执行一些初始化的准备工作

2.4. 实例语句块

实例语句块 : 没有static修饰的大括号 { } 语句块就是实例语句块 可以等同看做没有名字的成员方法

实例语句块在创建对象时 , 立即执行 , 并且在构造方法之前执行 ,(当对象创建完成后 构造方法里面的语句暂时不会执行 , 待实例语句块执行完之后才会执行) , 并且每创建一个对象就会执行一次

3. 封装

把所有组成部分组合到一起,还可以通过权限控制修饰符将数据隐藏起来 , 可以控制用户对类数据的修改程度

适当的封装可以让代码更容易理解,易于维护,更提高了代码的安全性

3.1. 包机制

3.1.1. Package

package : 引入包机制 , 可以解决命名冲突问题

类名的完整写法是带包名的

注意 : package 是规定,编译之后的class文件的放置目录,不是java文件的放置目录

带package的java文件 编译 : javac -d ./ -encoding UTF-8 java文件.java 运行 : java 包名.类名

package 必须放在文件的第一行

3.1.2. Import

import : 导入其他类,使当前类中可以直接使用该类,而不用编写类全名

import 包名.类名; 导入某个包下的某个类

import 包名.*; 导入某个包下所有类;

import 语句 可以有多个,但是必须放在class语句之上,如果有package的话,必须放在package之下

注意 : 按空格 或者回车的时候 会自动导包,如果程序没有问题,但是报错,可以查看

一下是否导包错误

3.2. 权限控制

4. 继承

4.1. 继承的概念

继承 : 是从一个已有的类中,衍生出一个新的类,该类往往包含着父类的特征,还可以新增 特有的属性

java中只支持单继承,一个类只能有一个父类,并且继承是可以传递的

一个类虽然只能继承一个类,但是一个类确可以有很多子类

如果一个类没有显示继承另一个类,则该类默认继承 java.lang.Object

Object 是java提供的根类,所有类都会直接或者间接的继承Object

4.2. 继承的作用

继承的好处 : 代码复用

继承最大的功能 : 方法覆写

4.3. 继承的用法

语法 : class 类名 extends 父类名 {类体 }

5. super

5.1. super的概念

super : 在子类中,表示了父类特征(可以理解为父类对象)

5.2. super的作用

功能 :

1 区分子类和父类同名的属性和方法

2 在子类构造方法中,重载调用父类的构造方法

5.3. super的用法

5.3.1. 区分父子类同名的属性

public class Super_01 {
    public static void main(String[] args) {
    Sub sub = new Sub();
    sub.test();
    }
}

class Sup {
    int age = 22;
    String name = "张三";

    public void m1() {
    System.out.println("父类111");
    }

    public void m2() {
    System.out.println("父类222");
    }
}

class Sub extends Sup {
    int age = 11;

    public void m1() {
    System.out.println("子类111");
    }
    public void test(){
    System.out.println(age);
    System.out.println(super.age);
    System.out.println(name);
    m1();
    super.m1();
    m2();
    }
}

5.3.2. 调用父类构造方法

super : 可以再子类构造方法中调用父类构造方法

在子类构造方法中,如果第一行没有写super() 或 this() 那么 默认有个super() 去调用父类无参构造

如果父类没有无参构造,则子类构造方法中,必须在第一行手写super(参数)进行调用

5.4. 注意事项

如果在子类构造方法中,没有显示出现super() 也没有出现 this(xxx) 则 默认有一个super() 调用父类无参构造

并且 super(xxx) 必须出现在子类构造方法 第一行 所以 this(xxx) 和 super(xxx) 不能同时出现

因为构造方法第一行有super()调用父类构造,所以 某一个类如果构造方法私有化了,那么该类不会再被继承

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值