继承
继承的特点:子类中可以访问父类的成员方法和成员变量,提高代码的复用性
继承的特点:只能单继承,不能多继承,可以多层继承
//继承中成员变量的访问特点:
局部变量,本类成员变量,父类成员变量,父类的父类的成员变量...
1.构造方法不能被继承,只能通过super(参数)调用
2.super()可以调用父类的构造方法,必须谓语第一行代码
3.this()的使用,必须位于第一行代码
语法
public class Fu{
}
public class Zi extends Fu{//extends 继承
}
关键字
-
super: 父 超 当访问继承的变量时父类成员变量与子类变量名重名时使用super关键字进行区分
-
sub: 子
-
this : 可以访问本类的变量,也可以访问继承的变量
父类私有的方法,this和super都不能访问
方法的重写
概述: 子类中的方法和父类中方法一模一样(方法名,参数列表, 返回值都相同)时被称为方法的重写
用来替换或者增强父类同名方法的功能
可以使用@Override在方法上进行注解(检查是否为正确重写)
-
父类的私有方法不能被重写
-
父类的静态方法也不能重写,但是如果父类与子类的静态方法一模一样,称为方法隐藏
-
方法的权限修饰符中,子类的要大于等于父类的权限修饰符
public > protected > 默认的 > private
抽象类
- 抽象类不能被创建对象(不能被实例化)
- 抽象类可以有构造方法
- 抽象类可以有成员变量和成员方法
开闭原则
Open-Closed Principle
应该尽量添加新的功能(Open开放供扩展),而不要修改原有的功能(Closed对原有的代码封闭)
代码块
概述: 在一个类中使用一对{}阔起来的内容叫做代码块
-
局部代码块
public static void main(String[] args){ { int a = 10; System.out.println(a); } } //位置: 存在于类中方法中 //作用: 节省内存,提高内存利用率,限制变量的生命周期,可尽早释放资源
-
构造代码块
public 类名(){ String name; { System.out.println("构造代码块") } public 类名(){ System.out.println("空参构造") } public 类名(String neme){ System.out.println("带参构造") } } //位置: 定义在于类中方法外 //特点: 随着构造方法的加载而执行,且优先先于构造方法的执行而执行 //作用: 将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性
-
静态代码块
public 类名{ static{ System.out.prinlnt("静态代码块") } } //位置: 定义在于类中方法外 //特点: 通过static 关键字修饰,随着类的加载而加载,且只执行一次 //作用: 在类加载的时候做一些数据初始化的操作
final关键字
final关键字可以用来修饰(方法,变量, 类)
final修饰的特点:
1.修饰方法: 表明该方法是最终方法,不能被重写
2.修饰变量: 表示该变量只能进行一次赋值,不能被重复赋值
3.修饰类: 表明该类是最终类,不能被继承
*变量是基本类型: final修饰值的是基本类型的数据值不能发生改变
*变量是引用类型: final修饰值的是引用类型的地址值不能发生改变,但是该地址里面的内容是可以发生改变的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KSvRjsfI-1596002949251)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200626213939458.png)]
public class Student{
String name;
public Student(){
}
Public Student(String name){
this.name = name;
}
Public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
class Test{
Public static void main(String[] args){
//创建Student对象
final Student student = new Student();
student.setName("张三");
student.setName("李四");
student.setName("王五");
//student = new Student();//编译报错,被final修饰的引用类型地址不能发生改变
}
}
模板设计模式
把一些固定步骤的代码放在抽象父类中,定义为抽象方法以便于进行重复使用,把变化的代码放在子类中进行实现
public abstract class TestTemplate{
public void tackePhoto(){
System.out.println("1.打开手机");
System.out.println("2.点开相机");
step3();
System.out.println("4.拍照");
}
//将不确定的行为定义为抽象行为方便其子类进行重写并给予确定的行为
public abstract void step3();
}
System.out.println(“2.点开相机”);
step3();
System.out.println(“4.拍照”);
}
//将不确定的行为定义为抽象行为方便其子类进行重写并给予确定的行为
public abstract void step3();
}