1 关键字 复习 this super static
序号 | 区别 | this | super |
1 | 定义 | 本类对象 | 父类对象 |
2 | 使用 | 本类属性 方法 对象 | 父类属性 方法 |
3 | 查找范围 | 先从本类查找,找不到去父类中 | 直接去父类中查找 |
4 | 特殊点 | This 代表当前对象 |
|
static 关键字 属于类空间中的保存信息
特点 :static保存的位置是全局数据区 也可以叫做类空间中 所以不适用new关键字去开辟堆空间爱你 可以直接使用类名称的方式直接调用类中的static属性
static定义方法 : 在定义普通方法的时候使用static关键字定义,方法就为静态方法 注意静态方法不能包含非静态方法
在一个普通方法中可以调用静态方法 在实例化之后才可以使用
public class TestDemo02
{
public static void main(String[]args){
Person per=new Person("张三",20,"北京");
Person per2=new Person("李四",30,"上海");
Person.city="南京";
System.out.println(per);
System.out.println(per2);
}
}
class Person
{
private String name;
private int age;
public static String city;
public Person(String name,int age,String city){
this.name=name;
this.age=age;
this.city=city;
}
//静态上下文 就是如下方法
public static void fun(){
tall();
}
// 以下为非静态方法
public void tall(){
System.out.println("name"+name);
}
public String toString(){
return "姓名"+name+"年龄"+age+"城市"+city;
}
}
代码块分为三部分
普通代码块
构造快:优先于构造方法执行 有几个对象就执行几次
静态块 :静态块优先执行,且只执行一次
public class Daimakuai {
// 普通块 方法体内部由大括号{}括起,
// 执行顺序为按照正常的执行顺序(先出现,先执行)执行。
{
System.out.println("我是构造块");
}
// 构造块 类的内部由{}括起 每次构造对象时都会被调用 优先于构造函数
public Daimakuai() {
System.out.println("我是构造方法");
}
// 静态块 类的内部 形式 static{} 用于初始化类 初始化类的属性
// 每个静态代码块执行一次 先定义先执行的原则
static {
System.out.println("我是静态块");
}
static public int h1 = 12;
public int h2 = 13;
static {
System.out.println(h1);
Daimakuai m3 = new Daimakuai();
System.out.println(h1);
System.out.println(m3.h2);
System.out.println(m3.h1);
print();
}
public static void print() {
System.out.println("已调用静态方法");
}
public static void main(String args[]) {
Daimakuai d1 = new Daimakuai();
Daimakuai d2 = new Daimakuai();
{
String str = "hello";
System.out.println(str);
}
String str = "world";
System.out.println(str);
}
}
final 关键字 在Java中表示终结器的概念 可以定义类 方法 属性 被定义的类不能继承 方法不能覆写 属性不能修改(常量)
多态: 方法的多态: 方法的重载 给定不同参数 完成不同的功能
对象的多态 : 向上转型 向下转型
向上转型 使用率80%
不转型的情况 10%
向下转型的情况 10%
向下转型必须先向上转型 在转型过程中必须发生关系 向上转型止呕才可以向下转型否则
Exception in thread "main" java.lang.ClassCastException: A cannot be cast to B
at TestDemo.main(TestDemo.java:8)
instanceOf关键字 :
在发生对象转型的时候,会出现错误 可以使用instanceOf关键字对象的判断 判断某个对象是否是某个类的实例
语法格式如下;
对象 instacneof 类名称 返回值 Boolean
public static void main(String[]args){
//A a =new A();
B b=new B();
A a=new B();
System.out.println(a instanceof A);
System.out.println(a instanceof B);
}
抽象类
就是一个普通的类 里面增加了抽象的方法, 使用abstract关键字进行声明
public abstract class Person{}
在继承关系中 也会继承一个抽象类 而不是一个实现好的类
抽象类可以存在子类会被被继承 继承关系中子类实例化首先调用父类的构造方法
抽象类不能使用final关键字修饰 因为抽象要被继承才可以使用
抽象类中不能存在static方法 因为被static定义的属性保存在类空间中
如何使用抽象类 一个类继承一个抽象类 这个类本身不是抽象类则要实现抽象类所有的抽象方法
抽象类缺点 受Java中单继承的局限 可以应用于 模版设计模式
接口: 在Java中属于特殊的类 只要一个类全部有抽象方法 全局变量组成这个类就是接口
作用: 定义标准 代表能力 对外暴露的方法
interface
一个类实现一个接口 接口可以存在多实现接口的过程
接口不能实例化 因为接口中的方法全是抽象方法
interface USB
{
//1 USB接口定义标准
// 初始化工作
public void install();
// 工作开始
public void work();
}
public class IntDemo
{
public static void main(String[]args){
Computer p=new Computer();
p.plugin(new Print());
}
}
class Phone implements USB
{
// 初始化工作
public void install(){
System.out.println("手机开始初始化");
}
// 工作开始
public void work(){
System.out.println("手机开始传输数据");
}
}
class Print implements USB
{
// 初始化工作
public void install(){
System.out.println("打印机开始初始化");
}
// 工作开始
public void work(){
System.out.println("打印机开始打印");
}
}
class Computer
{
public void plugin(USB u){ //向上转型 接收实现类
u.install();
u.work();
}
}
一个类只能单继承 但是接口可以多继承
接口与类的区别
No | 区别 | 抽象类 | 接口 |
1 | 定义 | Abstract | interface |
2 | 组成 | 普通方法 抽象方法 构造方法 普通属性 | 抽象方法 全局常量 默认方法 |
3 | 访问权限 | Public private | public |
4 | 关系 | 一个类抽能继承一个抽象类 | 一个类可以实现多个接口 |
5 | 使用 | extends关键字 | Implements关键字 |
6 | 特殊点 |
| 一个接口可以继承多个接口 |
工厂设计模式: 类与类之间是存在依赖关系的 依赖关系会造成耦合程度高 如果想要实现降低耦合的方式可以使用工厂设计模式