面向对象

面向对象

static和final

static关键字可以用来修饰成员变量、方法、代码块(注:static不能修饰局部变量,只能用final)

static叫做静态的、共享的、所属于类的,类被加载的时候会优先加载静态内容

static修饰的内容只有一份,被所有的对象以及类共享,对于static修饰的内容改变,也被所有对象可见

static修饰的内容两种调用方式:

  1. 通过类名.来访问 (建议)
  2. 通过创建类的实例对象,然后使用对象. 来访问(浪费内存)

注:在非静态方法中可以直接访问静态方法,反之不行,因为类加载肯定先于对象创建,在对象创建前一定会加载类,但加载类不一定要创建对象。

如何在一个静态内容中调用非静态内容:

  1. 在非静态内容中加static
  2. 创建非静态内容的所属对象,通过对象调用

补充:类加载发生在什么时候

  1. 当前类的静态方法被调用时
  2. 创建当前类的实例对象

final关键字

final可以修饰变量(局部变量和成员变量)方法和类,修饰成员变量时常和static连用,例static final int num = 3

当用final来修饰变量时,其值不能再发生改变;

final int num = 3;
num = 4;
//以上会出现编译错误

当修饰一个方法时,该方法在子类中将不能被重写;

class Father{
	final void write(){
		System.out.println("father");
	}
}
class Son extends Father{
	@Override
	void write(){//Cannot override the final method from Father
		System.out.println("son");
	}
}

当修饰一个类时,该类不能被继承。

final class Father{
}
class Son extends Father{
}
//The type Son cannot subclass the final class Father

构造器

在类中用来创建对象那个的方法称之为构造器 又称构造函数、构造方法

  1. 构造器是一个特殊的方法:
  • 方法名和类名相同
  • 方法无返回值
  • 在方法声明中不用声明方法类型
  • 构造器允许方法重载
  • 系统会默认构建一个无参构造器(空构造器),如果在当前类中声明了有参构造器之后,无参构造器就不存在了。所以声明有参构造器时,要同时声明一个无参构造器。不然在类中去调用有参构造器时报错
public class Animal {
	public int age;
	public int gender;
	
	public Animal() {
		System.out.println("无参构造器");
	}
	public Animal(int age) {
		System.out.println("这是一个有参构造器"+age);
		
	}
	public static void main(String[] args) {
		Animal animal = new Animal(3);		
	}
}

运行结果:
这是一个有参构造器3
  1. 构造器的作用就是用来创建对象的,构造器的调用只能通过new关键词去调用

this和super

this的用法:

this可以代指当前对象,通过this.来访问对象的属性或方法,当需要区分同名变量(局部变量和成员变量)时不能省略,其他时候可以省略

this可以用于构造器之间的互相调用 ,通过this()来调用, this()一定要在构造器的首行

super的用法(和this基本相同):

super可以代指当前对象的父类对象,通过super.来访问属性或方法,当需要区分同名变量(局部变量和成员变量)时不能省略,其他时候可以省略

super还可以调用父类的构造器 ,通过super() 来调用, super() 一定要在构造器的首行 ,默认情况下调用的父类的无参构造器(默认情况下每个类中都存再一个无参构造器 哪怕不写也存在)

当父类中存在其他构造器时,无参构造器不存在,此时如果再子类中没有通过super()显式的指定调用的构造器会导致程序报错。

this和super的关系:

显然,在构造器中this()和super()不能同时出现,如果两个都不存在,默认是存在的super()。

因为子类继承了父类,必须要使用super()来调用父类的构造器将父类加载进内存,所以基本每个构造方法都会隐式地去调用super,如果同时使用this和super,this会调用其他构造函数,结果导致多个构造器都调用super,显然是没有意义的,不能通过编译。

重写和重载

重载:同一个类下,存在多个方法名相同参数列表不同(参数顺序、参数类型、参数长度不同)的方法。

重写(也称覆盖):子类对父类方法的重写,可以在子类的方法上加入@Overried 注解来判断是否是重写。

重写需满足的条件:

方法名相同,参数类型相同,要发生继承关系

补充:子类返回类型小于等于父类方法返回类型,子类抛出异常小于等于父类方法抛出异常,

重写的目的在于对父类一些方法进行拓展,来满足自身的需求。

权限修饰符

修饰符的作用是用来屏蔽一些底层的实现逻辑,降低调用者(程序员)的复杂度,体现了java的封装特性。

  • 确保当前类更加安全。
  • 修饰符可以修饰类
  • 属性(成员变量) :
  • 避免随意.属性,修改获取属性 造成数据不安全
  • 如果用private修饰的话 一定要保证对外提供get、set方法让外部可见
  • 方法

屏蔽底层调用细节,降低调用者(程序员)的复杂度 使得代码更加健壮

权限修饰符本类同包下的子类同包下的无关类异包下的子类异包下的无关类
public
private××××
默认××
protected×
最常用的两种权限修饰符是public和private。

public:都能访问,被public修饰的方法、类、变量能被所有类可见

private: 只在本类可见

private可以屏蔽外界对它的访问,所以要想使用被private修饰的属性,需要对外提供set和get方法

protected  同包下和异包下的子类可见

默认: 不写任何权限修饰符,同包下可见,异包下不可见

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值