回顾
1.构造方法
语法:
访问修饰符 类名(参数1,参数2){
this. 成员变量= 参数1;
}
2.方法重载
在同一个类里,方法名字相同,参数的个数或者类型不同,与返回值没有关系
3.set方法与构造方法的不同
当对象创建的时候,构造方法只能对对象赋值一次,而set方法能够赋值多次;
4.static静态的好处
在数据静态之后,相同的数据会存放到方法区里面的静态区间,可以减少内存的使用
5.静态变量与成员变量的区别
1.俗语不同;
2.内存不同;
3.生命周期不同;
4.调用方式不同;
一、代码块
代码块就是指放在一对大括号 { } 里面的代码,其中,根据位置修饰符不同等等分为:
1.局部代码块;
放在方法里面的代码,随着方法的结束而销毁,节省内存空间
2.构造代码块;
放在类里面的代码,可以给成员变量赋值,其中代码块优先构造方法执行;
3.静态代码块;
放在类里面的代码,静态代码块只会加载一次,和构造代码块一样,也是优先与构造执行;
4.同步代码块;
保护多线程中的数据安全
二、继承
继承中包括父类(超类、基类)和子类(派生类),同时两个类必须满足is -a的关系才能够使用继承。
子类继承父类的关键字extends。
public class 子类 extends 父类(){
}
注意点:
1.在类与类继承的时候,父类是无法获取子类的东西的;
2.子类能够拿到父类的所有非私有的东西(属性和方法);
3.在子类与父类中有同一个成员变量, 如果,实例化是子类的对象, 首先获取子类的成员变量, 如果子类没有,就依次往上寻找父类的成员变量,如果都没有这个变量系统就会报错。
在继承中获取变量的方法
1.直接获取(一般是获取局部变量);
2.通过this关键字(获取成员变量);
public void setColor(String color) {
this.color = color;
}
3.通过super关键字(获取父类的成员变量);
public Xinge(String name, String color, String species) {
super(name, color, species);
}
在继承中获取父类方法的途径
1.在父类中通过this关键字调用本类方法
public void kk(){
this.eat();
}
2.在父子关系中,如果实例化是子类的对象,子类在调用其方法时,如果子类有这个方法,就调用,如果没有,就使用super关键字依次往上寻找,如果都没有,就报错。
方法的重载:
在同一个类里,方法名相同,参数的个数或者是参数的类型不同;
方法的重写:
在继承中,方法名是相同,参数是一样的;
1.子类方法的作用域不能大于父类方法返回值的作用域;
关于继承的一些注意点
1.所有类的直接父类与间接父类都是Object();
2.子类的访问修饰符权限不能严与父类(父类给的是公有的修饰权限public,子类不能给私有的访问权限 private);
3.@Override这个注解的意思即是代表该方法是重写父类的方法;
重写的作用: 子类调用父类的方法的同时,也可以执行自己的额外增加的方法体。
子父类中构造的使用:
1.如果没有调用父类的其它构造,系统会默认调用父类的无参构造
2.子类可以调用父类重载的构造:
语法:
super(参数的值) super("VC");
3.调用父类的构造必须放在第一句, 一个构造只能放一个super() ;
this关键字的三种获取方式:
1.获取成员变量: this. 成员变量的名字 ;
2.this.方法名字() ;
3.this() 调用构造方法;
不能继承的内容
1.父类所有的私有子类都拿不到(private)
2.不能继承父类的构造,但是可以调用父类的构造
总结:
在继承中,想要得到父类的属性、方法或者构造,都通过 super 关键字来获取;
格式:
属性: super.属性名
方法:super.方法名()
构造:super();
继承的好处:
可扩展性高,可维护性高
坏处 :
耦合度比较高