面向对象 2-静态,继承,重写

静态 static:
1.Static:是一个修饰符。static可以修饰变量,方法。一般没有用static修饰的成员变量和成员方法属于对象。但是用static修饰的成员变量和成员方法属于类,当前类的所有对象共用这些tatic修饰的成员变量和成员方法;

(1)用static修饰成员变量叫“静态变量”。静态变量是项目全局变量。静态变量比较占用内存,能少用尽量少用。
	a.静态变量的声明语法:static 数据类型 变量名【=值】;

	b.一量声明当前类的所有对象共用。静态变量属于类,所以可以用 类名.静态变量 调用。
	还可以 对象名.静态变量 调用.

	c.静态变量在静态方法和一般方法都可以调用。

(2)用static修饰成员方法叫“静态方法”。
	一般声明没有static修饰的方法叫“实例方法”。
	a.静态方法的声明语法:public static 返回值类型 方法名(参数类型 参数名,参数类型 参数名){};

	b.一量声明当前类的所有对象共用。静态方法属于类,所以可以用 类名.静态方法() 调用。还可以 对象名.静态方法() 调用.

	c.静态方法可以直接被实例方法调用,静态方法可以被静态方法直接调用;实例方法不可以被静态方法直接调用,但是在静态方法中,可以通过对象来调用实例方法。

(3)静态的变量和方法执行时间:一般在类加载的时候,就优先加载静态的变量和方法。

(4)静态块:属于类,在类加载的时候就加载静态块。
	
	静态块: static{
			代码块;
		   }
	a.只能执行一次。
	b.静态块只能用静态变量。
	静态块的适用场景:(1)在类加载时一直程序终止,这个模块的代码或数据,大家都要共用的数据,实现共用的是因为我在类中声明这个静态变量。
		(2)在程序一开始执行时,我想先执行代码块,就可以静态块。

2.访问修饰符:类,成员变量,成员方法

修饰符 同一个类中 同一个包中 不同包
(子类中) 全局
Private Yes
Default(friendly) Yes Yes
Protected Yes Yes Yes
Public Yes Yes Yes yes

继承extends
3.继承:面向对象第二大特征。适用场景:满足子类是一个父类实例“is-a”
a.好处:(1)实现代码的可复用性。(2)代码的可扩展性。
b.继承的关键字:extends
c.继承的语法:
public class 父类名{

   }

    public class 子类 extends 父类名{

   }

d.子类可以继承父类:公有的和受保护的成员变量,成员方法,子类可以继承。
	子类不可以继承父类的私有的成员变量,成员方法,构造方法。

e.super:指代父类的对象的引用。
	调用父类的构造方法:super(【参数】);
	在子类的构造方法中要调用super调用父类的构造方法,super(【参数】)只能写在第一行。

  this:指代当前对象的引用。
	调用当前类的构造方法:this();this()调用时只能写在构造方法第一行。

f.构造方法的调用顺序:在New一个子类对象,先默认调用父类无参构造,再调用子类的构造。
	如果子类的构造方法中显式的调用了父类的有参构造,那么在用这个子类的构造方法New一个子类对象,先调用父类有参构造,再调用子类的构造。

4.方法重写:提高子类方法的扩展性。@Override注解的作用表示当前的方法是重写父类的方法
(1)要有继承的存在。
(2)父类的方法被子类重写方法体。
(3)子类重写的方法的方法名,返回值类型,参数列表和父类被重写的方法相同,子类重写的方法的访问修饰符的范围大于或等于父类被重写的方法的访问修饰符的范围。

注:父类的构造方法不能被子类重写。没有继承所以没有重写。

eg:父类中:
/**
 * 自我介绍
 */
protected void self() {
	System.out.println("我的姓名是"+name+",年龄是"+age+",性别是"+sex);//方法体
}

子类中:
/**
 * 自我介绍
 */
@Override
public void self() {
	super.self();//方法体
	System.out.println(",工作年限是"+workYear);//方法体
}
注:子类中重写的方法体中的内容没限制。

5.object类是java类所有类的基类。java在定义的时候如果没直接继承一个类,那么它就默认继承object类。

6.java只支持单继承,一个java类只能直接继承一个父类。java继承具有传递性。
a类继承b类,b类又继承c类——》a类就间接继承了c类。

7.final:
(1)用final修饰的类是“最终类”。最终类不能被继承。
(2)用final修饰的方法,不能被子类重写。
(3)用final修饰的变量,就变成了常量。常量在声明的同时必须赋值,如果在声明时没赋值,只能在构造方法中给它赋值。而且常量一旦赋值不能更改。
eg: public final int A=1;
(1)修饰类:类将不能被继承
(2)修饰属性:把变量变成常量
(3)修饰方法:控制方法不能被覆盖

8.包的作用:用来管理类。
命名规范:com.公司名.项目名.分层架构名。
声明包的语法:package 包名;
导包的语法:import 包名.VaribleStatic;用来调用另一个包中的类里面方法或属性。

猜你喜欢

转载自blog.csdn.net/weixin_43905026/article/details/88119588