java面向对象篇(静态、继承、重写)

重写和重载的区别(重点)
重写(Override)
重写跟重载都是实现多态的方式,重写体现了运行多态性
重写发生在子类和父类之间,就是在子类中把父类本身有的方法重新写一遍,子类继承了父类原有的方法,但有时候子类并不想原封不动的继承父类中的某个方法,所以在方法名、参数列表、返回值类型都相同的情况下,对方法体的修改或重写,子类修饰符的权限大于或等于父类。
用@Override来做标注//表示后面的方法时重写方法,如果不是则报错
Student student = new Student();
System.out.println(student.toString());//打印对象—根据继承性调父类的方法
System.out.println(student)//打印对象的简化版
重载(Overload)
重载跟重写都是实现多态的方式,重写体现了编译多态性
在同一个类中,多个方法的功能相似,这个时候可以进行重载,重载方法名相同,参数列表不同(即里面的参数类型,个数),返回值是否相同对重载没影响(Jvm调用方法时,先看方法名,再看参数列表通过参数类型和个数来决定用哪一个)
继承
继承是从已有的类中派生出新的类,新的类能吸收已有类的属性和方法,并能扩展新的属性和方法
类的继承格式
class 父类{
}
class 子类 extends 父类{
}java中通过extends关键词来表明一个类从另一个类继承而来
java不支持多继承,但支持多重继承
在面向对象编程(opp)术语中,我么把Person称为超类(super class),父类(parent class),甚类(base class),把student称为子类(sub class),扩展类(extended class)、派生类、次类
继承的特点
1.子类拥有父类非private的属性、方法。
2.子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
3子类可以用自己的方式实现父类的方法
4.提高了类之间的耦合性
耦合:模块与模块之间,代码与代码之间的联系即类与类之间的依赖程度,耦合性好说明两个类或对象之间的关联程度很紧密,
完全解耦:就是把两者之间的关系疏松一下,以免在更改一个类时影响另一个类

继承可以使用extends来实现,而所有的类都继承于java.lang.Object,当一个类没有继承关键词,则默认继承object(这个类在java.lang包中,所以不需要import)祖先类
在java中任何class(类)的构造方法,第一行语句必须是调用父类的构造的构造方法。如果没有明却的调用父类的构造方法,编译器会帮我们自动加一句super();super()表示子类在初始化时调用父类的空参数的构造方法来完成初始化。一个类都会有默认的空参数的构造函数(这个函数不执行任何代码,且不会显示出来,编译器自动生成不是继承),若指定了带参构造函数(函数即方法),那么默认的空参数的构造函数就不存在了。这时如果子类的构造函数有默认的super()语句,那么就会出现错误,因为父类中没有空参数的构造函数,因此,在子类中默认super()语句,在父类中无对应的构造函数,必须在子类的构造函数中通过this或者super(参数)指定要访问的父类中的构造函数
super:调用父类方法
this:调用自己 的方法(普通方法和构造方法)、属性、
super和this是不共存的 只能用一个,因为两者调用构造方法都默认放第一位,所以只能出现一个
静态
静态字段
在一个class中定义的字段,我们称之为实例字段。实例字段的特点是,每个实例都有独立的字段,各个实例的名字字段互不影响。
还有一种字段,是用static修饰的字段,称为静态字段:static field。
实例字段在每个实例中都有自己的一个独立“空间”,但静态字段只有一个共享“空间”,所有实例都会共享该字段,即静态字段在堆中内存只有一个空间,随之赋值改变而改变,多个引用变量的指向也随之改变,静态属性的调用:类名.属性,类名.set属性(实参)
静态方法
用static修饰的方法称为静态方法。
调用一个实例方法必须通过一个实例变量,而调用静态方法则不需要实例变量,通过类名就可以调用。
接口的静态字段
接口(interface)是抽象的,所以不能定义实例字段。但是,接口可以有静态字段,并且静态字段必须为final类型 例如:public static final int MALE=1;实际上接口的字段只能是public static final类型。所以可以把这些去掉变成 int MALE=1;(编译器自动把该字段变成public static final类型)
成员属性—静态属性
成员属性:每个对象都有一份独立的成员属性-----属于对象
静态属性:所有对象共用一份静态属性------属于类
成员属性:通过对象调用方法
静态属性:通过类名来调用
非静态代码块:与对象有关,有多少对象,就会触发多少次
静态代码块:优先于对象先加载,且于对象无关,只触发一次
成员方法中能否使用静态属性?(可以),静态方法中能否使用成员属性?(不可以)
原因:加载时机问题,静态属于类,在类的字节码文件加载时加载,这时还没产生对象,不识别成员属性
代码的执行顺序
1主调类的静态代码块
2对象父类的静态代码块
3对象的静态代码块
4对象父类的非静态代码块
5对象父类的构造函数
6对象的非静态代码块
7对象的构造函数
应用场景
静态方法:做为工具类使用----Arrays(调用类名.方法名(参数))
静态属性:作为状态值的使用------系统定好的值,无需改变
静态代码块:初始值加载-----数据库驱动加载,只加载一次
final
1修饰类:final修饰的类无法拥有子类(太监类)
2修饰属性:final修饰的属性必须要赋值,且后续不能更改
3修饰方法:final修饰的方法不能被重写
分析main方法为什么是这么定义的
了解java中main方法的6种声明形式:
1public static void main(String[] args)
2public static void main(String args[])
3public static void main(String… args)
4static public void main(String[] args)
5static public void main(String args[])
6static public void main(String… args)
我们要知道写的程序要被编译成class文件,再有jvm编译各个系统识别的机器语言
main方法之所以是public,是因为java程序在运行时首先创建一个jvm实例,程序要运行需要调用main方法,jvm从外部调用main方法这就需要访问权限修饰符必须给出外部的访问的权限,所以只能用public。
static的定义是为了jvm在调用main方法时不用实例化对象,只需要在初始时加载main方法所在的类,然后直接通过类名.main来调用main方法。
void表示main方法没有返回值,没有返回值的原因是因为java不需要main方法想操作系统返回退出信息,如果main方法正常退出,那么java应用层的退出代码为0,表示成功运行了程序。
main的名称不能改变是为了jvm能够识别程序的运行起点,main方法可以被重载,重载的main方法不会被执行。main方法作为程序初始线程的起点,任何其他线程均由该线程启动。jvm内部有两种线程,非守护线程和守护线程,main方法属于非守护线程,守护线程通常jvm自己使用,java程序也可以表明自己的线程是守护线程。当程序中的所有分守护线程终止时,jvm退出。也可以用Runtime类或者System.exit()来退出
String[] args,是main方法唯一可以改变的地方,args是arguments的缩写,只是一个变量默认名。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值