包的定义
使用package声明包,以英文分号结尾如果有包的声明,一定是Java源代码的第一条语句一个Java文件中,最多只能出现一次package语句包的命名规则
包名由小写字母组成,不能以圆点开头或结尾
一般为域名倒置
项目.模块名
eg:com.baidu.shopping.dao
包的导入
import
保护不同包的子类,可以访问protected的方法和变量
包1 package javalearning.kkb7oob4; /** * @author chenxu * @date 2020/10/21 - 19:38 */ public class PersonFather { public String name; protected String sex; String id; private int age; public void eat(){ System.out.println("PersonFather.eat"); } } 包2 package javalearning.kkb7oob4Test; import javalearning.kkb7oob4.PersonFather; /** * @author chenxu * @date 2020/10/21 - 19:42 */ public class PersonSon extends PersonFather { public static void main(String[] args) { PersonFather personFather = new PersonFather(); personFather.sex = "female"; // error: 'sex' has protected access in 'javalearning.kkb7oob4.PersonFather' //protected修饰符保护的是不同包的子类的修饰权力 PersonSon personSon = new PersonSon(); personSon.sex = "male"; } }super用于子类访问父类
构造方法(必须在子类的构造方法的第一句)属性方法 this访问本类构造方法必须放在第一行 访问的是本类的属性和方法 this可以引用当前对象
super访问父类的构造方法必须放在第一行 访问的是父类的属性和方法 super只能放在子类中使用
super、this都不能放在静态方法中使用,构造方法中引用构造方法时不能同时出现,因为只有一个第一行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tVJr3C7p-1603338247804)(C:\Users\11587\AppData\Roaming\Typora\typora-user-images\1603293270960.png)]
规范
子类方法必须和父类有相同的方法名称、参数列表和返回值类型子类方法的访问权限必须大于或等于父类的权限子类方法抛出的异常不能大于父类被重写方法的异常区别和联系
重载就是在同一个类当中有多个名称相同方法,但各个相同方法的参数列表不同(无关返回值类型)
重写则发生在不同的类当中,并且两者要有继承关系,重写是方法名字和参数的列表是要完全一致
JVM会先记载父类,再加载子类
在栈内存中为定义的变量分配内存空间,同时在堆内存中为真正的对象分配内存空间
调用构造器为创建出来的对象进行初始化
子类所有的构造方法,默认都会调用父类中的无参构造方法==子类实例化之前会先实例化父类
先执行父类的构造方法在执行子类的,默认在子类的构造方法中第一行加上super();
如果父类中不存在无参构造,而是有参构造,则需要在子类的构造方法中第一行写上
super(参数列表)
父类: public class Father { public Father(){ System.out.println("Father.Father"); } } 子类: public class Son extends Father { public Son(){ //默认 super(); System.out.println("Son.Son"); } public static void main(String[] args) { Son son = new Son(); } } 此时输出结果为: Father.Father Son.Son当父类不存在无参构造时
public class Father { public Father(int a){ System.out.println("Father.Father"); } } public class Son extends Father { public Son(){ super(666);//在子类的构造方法中成功调用父类的构造方法即可 System.out.println("Son.Son"); } public static void main(String[] args) { Son son = new Son(); } }Object类的构造方法是最先被执行的
final修饰的类不能被继承
eg:String类
final修饰变量
该变量只能被赋值一次且必须赋值一次
所以被final修饰的变量是常量
成员变量、局部变量都可以用final修饰
成员变量在使用final修饰时必须在声明时就赋值(或通过构造方法赋值)变成常量
public class FinalDemo { final int age =12; final int num; public FinalDemo(int num){ this.num=num; //通过构造方法给其赋值 } }局部变量不用,但是必须在调用成员变量前为其赋值
final修饰方法
表示该方法不能被重写覆盖
super只能出现在子类的方法和其构造方法中
super调用构造方法时,只能出现在第一句
super不能访问父类的private成员
子类实例化时—先实例化父类,再实例化子类
在子类中所有的构造方法,默认调用父类的无参构造
当父类不存在无参构造时,需在子类第一行成功调用父类的有参构造
