main方法
main方法中进行赋值:(位置)Edit Configurations...-->Program arguments:(进行赋值)
static特点的封装类
代码块:
在Java语言中使用{}括起来的内容
根据位置和声明不同:局部代码块,构造代码块,静态代码块,同步代码块(多线程)
局部代码块:局部位置:在方法中;
作用:限定变量的生命周期,及早释放,提高内存使用率;
构造代码块:成员位置:类方法外;
特点:每次创建对象都要使用一次构造代码,优先于构造方法执行;多个构造方法中的相同代码可以提取出来放到构造代码块中,每次调用构造结构都执行,并且在构造方法之前执行;
静态代码块:成员位置:只要是static 修饰 与类相关
特点:随着类的加载,只执行一次,而且优先于构造代码块和构造方法,用于对类进行初始化,在加载的时候就执行,并且执行一次。
执行顺序:静态代码块,构造代码块,构造方法。
类的继承:
定义:把公共的代码提取出来,然后放到一个独立的类,再让其他类与这个独立的类产生关系在我们java中存在这样的关系叫做继承。
多个类的相同的属性行为,提取到这个独立类中 那么这多个类就不需要再定义这些属性和行为,只要继承就可以了(这个独立的类就是父类 超类 基类 super 这多个类就是子类 也叫派生类)
继承的格式
class 父类名{}
前提这个父类要存在
class 子类名 extends 父类名{
}
继承的好处:
1:提高代码复用性
2:提高代码维护性
3:让类与类之间产生关系 多态的前提
弊端: (了解)开发的原则 高内聚 低耦合
内聚: 完成某个功能的能力 高内聚 一个类能把所有事情干了,就不用麻烦别人
耦合:类与类之间的关系 低耦合 类与类之间关系尽量不要太复杂,
Java支持多层继承,不支持多继承
this:本类对象使用
super:父类对象使用
this():无参构造
super():父类无参构造
每个类都使用Object作为超类;
所有的构造方法第一句默认是super();
父类没有无参构造,子类怎么办?
1.给父类加一个无参构造。
2.子类构造可以通过super(..)调用父类非构造方法。
3.可以通过一种间接的方式 访问到父类存在构造;通过this()访问本类构造。
继承中成员方法关系:
1.子类中的成员方法名 和 父类中的成员方法名 不一样,先调用子类中的再调用父类
2.子类中的成员方法名 和 父类中的成员方法名 一样 ,调用子类
方法的重载:在同一个类中,方法名相同、参数列表不同(类型不同,个数不同),与返回值类型无关
在继承中,子类出现了和父类一模一样的声明(方法名一样,参数列表一样,返回值类型一样),叫做方法的重写,也叫做覆盖。 子类重写父类的方法。
方法重写的注意事项
1.父类中私有的方法不能被重写(私有方法不能被继承,怎能被重写?)
2.子类重写父类方法时,权限修饰符不能低于父类的权限修饰符(最好一致)
3.父类静态的方法 如果子类要重写一个重名的方法,子类也要静态的。
构造方法不能被继承。(可以在子类构造中用super调用)
final关键字:
1.被final修饰的类不能被继承
2.final修饰的方法不能被重写,能被继承。
3.被final修饰的常量不可以不赋值,而且只能赋值一次。
4.final修饰局部变量:
1>.final变量只能赋值一次,不能重新赋值
2>.基本数据类型(是一个值),被final修饰后值不能变。
3>.引用数据类型(例如方法名引用或者类名引用等等。),值可以改变,地址值不可以改变。
多态:
多种形式(同一个事物不同的状态)
例:H20:气态:水蒸气;液态:水;固态:冰。
对同一个对象,在不同时刻的状态。
例:动物 d=new Lv();
多态前提:
1.有继承
2.需要有方法的重写
3.父类的引用指向子类(本质上是子类)
我们说的多态是对象的多态。
多态访问特点
编译期:从源码。java文件--javac-->.class
编译期不会产生对象,只是对代码的语法进行检查。
方法的: animal b=new Lv()
编译时看左边(看父类)看父类有没有方法的声明(可以没有方法体(就是抽象方法))
运行时看右边(看子类)看子类有没有重写父类方法,实际就是运用子类的方法
a.load();看父类有没有load 方法的声明。
多态的好处:
提高了代码的维护性;提高代码扩展性。封装
多态弊端:
子类特有的方法不能被调用。
我们之前写的猫狗案例中,动物中的吃的方法,给了空方法,并不准确;因为具体到每个动物,吃的方法不一样
因此要用抽象方法(不写方法体,只声明)。
特点:
1.抽象方法格式:public(权限修饰符) abstract void(返回值) 方法名()
public abstract void animal()
2.如果一个类中有一个抽象的方法,那这个类也必须是抽象类。
抽象类中既可以有抽象方法,也可以没有抽象方法。
3.抽象类中可以有构造方法。虽然有构造方法但不能实例化(不能创建对象)!
为什么:因为抽象类中存在抽象方法,没有方法体,调用构造方法没意义所以不能创建。
抽象类的构造方法是用于子类的初始化使用。
4.可以间接创建实例(多态创建对象)
5.研究抽象类的子类:可以,但是不能创建对象了~,如果不是抽象类就必须重写抽象方法。