权限修饰符与抽象

来源:互联网 发布:不履行网络安全法 编辑:程序博客网 时间:2024/05/29 19:35
   继承中构造方法的关系
继承中的构造函数的第一行默认有一条隐式语句: super();
super();调用的是父类的无参构造函数
而且子类中所有的构造函数默认第一条都是super();


---->最上层Object


为什么?
因为子类会继承父类的数据 可能还会使用父类的数据
所以 子类初始化之前 一定要完成对父类数据的初始化
当父类中没有无参构造 怎么办
1.在子类的额构造函数中调用父类的有参构造super(x,x)
2.在子类的构造函数中调用子类的其他构造函数 从子类的构造函数调用super(x,x);


this() super()都要在构造函数的第一行 只能用一个
   this()和super()区别
调用成员变量:
this:调用本类的 也可以调用父类的
super:调用父类的
调用成员方法:
this:调用本类的 也可以调用父类的
super:调用父类的
调用构造方法:
this:调用本类的
super:调用父类的
super:代表当前对象的父类引用
this:代表当前对象的引用


   一.final
最终的


final 可以修饰 类 方法 变量
final修饰的类不可以被继承
final修饰的方法不可以被覆盖
final修饰的变量 是一个常量 只能被赋值一次 命名规则 单词全部大写 多个单词之间 用下划线分割


   二.权限修饰符
包 package
为什么有包?
将字节码文件(.class) 进行分类存放
包其实就是文件夹

  1.按功能分
删除
修改
查询
增加
  2.按模块分
student
teacher
定义包的格式
package 包名;
多级包用 . 分开即可


将字节码文件生成到 类中package指定的目录中
javac -d . Demo_1.java
注意:
1.package必须写在程序的第一条可执行代码
2.package语句在一个java文件中只能有一个
3.如果没有package 默认表示无包名
不同包下的子类之间如何访问?
import 包名
import java.util.Scanner; --->具体到哪个类
import java.util.*;


*:通配符 util包下的所有类 都被导入
   访问权限修饰符
四个
private 私有的
default(什么也不写) 默认的
protected 保护的
public 共有的


访问权限修饰符
private :本类
default 本类 同包
protected 本类 ,同包 ,不同包下(子类)
public 本类 ,同包 ,不同包下(子类) , 不同包(无关类)
   
   修饰符:
权限修饰符: private 默认 protected public
状态修饰符: static final
抽象修饰符: abstract
   类:
权限修饰符: 默认 public
状态修饰符: final
抽象修饰符: abstract
   成员修饰符:
权限修饰符: private 默认 protected public
状态修饰符: static final


用的最多的是 private


   构造方法:
权限修饰符: private 默认 protected public

用的最多的是 public

抽象
一 概念
看不清
被abstract修饰的类叫抽象类
被abstract修饰的方法 叫抽象方法
当子类重写方法 功能本身由独特性 那么new对象的时候 就会发生一种状况
把父类的功能覆盖了 父类中这个方法就没有意义了 但是确实具有相同的功能
例如: java学生和H5学生都有学习的方法 但是学习的内容不同
那么怎么抽取呢?
只抽取功能定义 而不抽取功能主体 没有方法体 看不懂 对于这种看不懂的方法 用一个标识符标识一下

1.抽象方法一定在抽象类中
2.抽象方法和抽象类都必须用abstract修饰
3.抽象类不可以用new创建对象 抽象类无法实例化 因为调用抽象方法没意义
4.抽象方法想要被使用 必须由子类重写其所有抽象方法 建立子类对象调用
如果只覆盖部分 会继承父类的抽象方法 那么子类也是个抽象类
5.一个抽象类中可以包含抽象方法和非抽象方法 但一个方法被抽象 他所在的类必须是抽象类
抽象类可以不定义抽象方法


抽象的好处?
抽象父类让子类必须完成父类的全部抽象功能
抽象类和普通类一样
普通类描述行为 属性 该怎么描述还怎么描述
抽象类中有构造函数 但是由于"抽象"对于类的限定 是的这个类无法创建对象

abstract只是一个修饰符 如果定义的抽象类中没有抽象方法 那么只是为了让该类创建对象


二  语法格式
抽象类
访问权限修饰符 abstract class 类名
{

}
抽象方法
访问权限修饰符 abstract 返回值类型 方法名(参数列表);

若一个普通子类继承一个抽象子类 该抽象子类又继承一个抽象的父类
那么 该普通子类必须抽象子类和抽象父类中的所有的抽象的方法
但是 抽象子类已重写过的抽象方法 普通子类就不需要重写了

模板方法设计模式
当代码完成优化后 就可以解决这类问题


什么是模板呢?
在定义功能时 功能的一部分是确定的 但是有一部分是不确定的 而确定的部分在使用不确定的部分的时候
那么这时就将不确定的部分暴露出去 由该类的子类去完成