java面向对象进阶——static和继承

129 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情

static

静态变量

被static修饰的成员变量,叫做静态变量

特点

  • 被该类所有对象共享
  • 不属于对象,属于类
  • 随着类的加载而加载,优先于对象存在

调用方式

  • 类名调用
  • 对象名调用

静态方法

被static修饰的成员方法,叫做静态方法

特点

  • 多用在测试类和工具类中
  • Javabean类中很少会用

调用方式

  • 类名调用
  • 对象名调用

工具类

帮助我们做一些事情的,但是不描述任何事物的类

  • javabean类:用来描述一类事物的类。比如,Student,Teacher,Dog,Cat等
  • 测试类:用来检查其他类是否书写正确,带有main方法的类,是程序的入口
  • 工具类:不是用来描述一类事物的,而是帮助我们做一些事情的类

书写规则

  • 类名见名知意
  • 私有化构造方法

注意事项

  • 静态方法只能访问静态变量和静态方法
  • 非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法
  • 静态方法中是没有this关键字的

总结:

  • 静态方法中只能访问静态
  • 非静态方法可以访问所有
  • 静态方法中没有this关键字

继承

类与类之间的父子关系

  • java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系
public class Student extends Person{}
  • Student称为子类(派生类),Person称为父类(基类或超类)
  • 继承后子类可以得到父类的属性和行为,可以直接使用
  • 子类可以在父类的基础上新增其他功能,子类更强大

继承的好处

  • 可以把多个子类中重复的代码抽取到父类中,提高代码的复用性
  • 子类可以在父类的基础上,增加其他的功能,使子类更强大

什么时候用继承

当类与类之间存在相同(共性)的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码

特点

java只支持单继承,不支持多继承,但支持多层继承

  • 单继承:一个子类只能继承一个父类

  • 不支持多继承:子类不能同时继承多个父类

  • 多层继承:子类A可以继承父类B,父类B可以继承父类C,C是A的间接父类,B是A的直接父类

  • 每一个类都直接或间接的继承于Object类

public class Cat extends Animal{
	public void catchMouse() {
		System.out.println("猫在抓老鼠");
	}
	private void money() {
		System.out.println("爸爸的私房钱");
	}
}

此处若子类想要访问money则会报错,因为private不可被继承,子类只能访问父类中非私有的成员

子类到底能继承父类中的哪些内容?

构造方法非私有private 不能
成员变量非私有 能private 能
成员方法非私有private

成员方法能否被继承

image.png

虚方法

  • 非private修饰
  • 非static修饰
  • 非final修饰

成员变量的访问特点

就近原则:谁近用谁

class Fu{
	String name = "Fu";
}
class zi extends Fu{
	String name = "Zi";
	public void ziShow(){
		String name = "ziShow";
		System.out.println(name);//ziShow
		System.out.println(this.name);//Zi
		System.out.println(super.name);//Fu
	}
}
  1. 就近原则,从局部位置开始往上找
  2. 有this,从本类的成员位置开始往上找
  3. 有super,从父类成员的位置开始往上找(最多只能调用一个super)