继承

继承概述

📄 面向对象的三大特征之一;
📄 可以继承父类属性;
📄 还可以新增自己的属性;

📔 格式**public class 子类名 extends 父类名{}**
📄 父类:也被称为基类或者超类;
📄 子类:也被称为派生类;


继承的优缺点

📔 优点
📄 提高了代码的复用性(多个类相同的成员可以放到同一个类中);
📄 提高了代码的维护性(如果方法的代码需要修改,修改一处(父类中)即可);

📔 缺点
📄 继承让类与类之间产生了关系,类的耦合性增强了
📄 当父类发生变化时子类的实现也发生变换,削弱了子类的独立性;

📔 什么时候用继承
📄 继承体现的关系:is a;
📄 假设法:两个类A和B,如果满足A时B的一种,或者B是A的一种,则可以考虑使用继承;
📄 Eg:苹果和水果,猫和动物;


继承中变量的访问特点

📔 在子类中访问一个变量

  1. 子类局部范围内找;
  2. 子类成员范围内找;
  3. 父类成员范围内找;
  4. 如果都没有则报错

📔 super 关键字
📄 访问本类的成员变量使用**this**
📄 访问父类的成员变量使用**super**

关键字 访问成员变量 访问构造方法 访问成员方法
this this.成员变量
访问本类中的成员变量
this.ClassName(…)
访问本类构造方法
this.成员方法(…)
访问本类的成员方法
super super.成员变量
访问父类中的成员变量
super.ClassName(…)
访问父类构造方法
this.成员方法(…)
访问父类的成员方法

📔 构造方法的访问
📄 在构造子类之前,由于子类继承父类,因此可能会使用到父类的数据,因此会先构造父类,在构造子类;
📄 每一个子类构造方法的第一句都默认为:**super();**
📄 在父类中没有无参构造方法:
📃 使用**super(data);**调用父类的有参构造方法;
📃 在父类中手动添加无参构造方法;(推荐


继承中成员变量的访问特点

📄 子类可以调用父类中的方法;
📄 优先级同上;

📔 关于在访问时的各种内存加载
📑 注意栈的处理情况,“先进后出”;


方法重写

📄 子类中出现和父类一样的方法声明;
📄 当子类需要父类的功能,而功能的主体子类自己有特有内容,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容;
📄 **@Override**

  1. 是一个注解(注解后面会学习到);
  2. 可以帮助我们检查重写方法的声明的正确性;

📔 方法重写注意事项
📄 成员函数的修饰符默认时;

  1. 不是public,也不是private
  2. 权限没有Public大;

📄子类重写父类方法时,只要访问权限不比父类低就行;

  1. 如父类用默认修饰符,子类可以用public或者默认;
  2. 父类public子类public;

📄 访问权限:**public** >** 默认** > **private**


Java中继承的注意事项

📔 类只支持单继承,不支持多继承;
📔 Java中类支持多层继承;
📔 继承中构造方法注意事项
📄 子类中不能直接对继承于父类的private变量赋值;
📄 可用super();构造方法在子类构造方法中调用父类构造器;


修饰符

package 包

📔 包的概述
📄 其实就是文件夹;
📄 作用:对类进行分类管理;

📔 创建包
📄 格式:package 包名;(多级包用.分开)
📄 范例:**package com.itheima**
📄 在idea等开发软件中创建包较为方便,但是用记事本创建需要一定的注意事项;
📄 在文件目录中:需要建立一个文件夹,模拟包的存放

  1. package com.songwang.test //用记事本开发时,自己定义包
  2. public class HelloWorld{
  3. public static void main(String[] args){
  4. System.out.println("HelloWorld!");
  5. }
  6. }
  7. /*cmd控制台
  8. D:\JavaProjects>javac HelloWorld.java
  9. D:\JavaProjects>java com.songwang.test.HelloWorld
  10. HelloWorld!
  11. */

📔 手动创建包
📄 在test目录下,将通过javac编译的 .class文件剪切到该目录下;
📄 使用java 命令执行文件;
Java面向对象「继承」 - 图1


📔 自动创建包
📄 **-d . HelloWorld.java** 注意其中 . 的左右都有空格;

  1. /*cmd控制台:
  2. D:\JavaProjects>javac -d . HelloWorld.java
  3. D:\JavaProjects>java com.songwang.test.HelloWorld
  4. HelloWorld!
  5. */

📔 导包
📄 **import 包名;**


权限修饰符

📄 private
📄 默认
📄 protected
📄 public

修饰符 同一个类中 同一个包中
子类无关类
不同包的子类 不同包的无关类
private
默认
protected
public

状态修饰符

📔 **final** (最终态)
📄 修饰方法:表示最终方法,不能被改写
📄 修饰变量:表明最终变量,不能被修改
📄 修饰类:表明最终类,不能被继承


static关键字

📔 静态变量
📄 有些变量希望在内存中只有一份,而且能被一个类所有的实例对象所共享;
📄 例如学校名称,在创建学生类的时候,所有成员都在一所学校,及没有必要为每一个学生再分配一个空间用以储存学校,只需要共享一个变量即可;
📄 语法:**static 变量类型 变量名;**
📄 访问:ClassName.变量名
📑 **static**关键字只能用于修饰成员变量,不能修饰局部变量;

📔 静态方法
📄 一般情况下,要使用类中的成员方法,必须先创建对象再访问该方法,若是想不通过创建对象就能访问成员方法,可以通过用**static**关键字修饰该方法,使其成为静态方法,可以直接通过类名对其进行访问;
📄 只需在方法前加上**static**关键字即可;
📄 访问时可以通过**类名.方法名**也可以通过**实例对象名.方法名**
📑 注意:**static**修饰的方法中只能访问**static**修饰的变量,原因是没有**static**修饰的变量只能通过实例化对象访问,不能直接通过类名访问;

📔 静态代码块
📄 Java中使用一对{}括起来的代码称之为代码块;
📄 Java中可以使用**static**关键字修饰该代码块,使其成为静态代码块;
📄 静态代码块在类加载的时候加载;