Java 基础2

Java基础

  • 继承是多态的前提(抽取共性)

    • 访问时,先子类后父类
    • 重写:继承时,方法名称一样,参数列表一样,子类的返回值范围不能超过父类的返回值范围
    • 子类方法的权限必须大于等于父类方法的权限 public > protected > default > private
    class Fu{
    	public void method(){
    		System.out.println("fu");
    	}
    }
    class Zi extends Fu{
    	public void method(){
    		System.out.println("zi");
    	}
    }
    Fu test = new Zi();
    test.method(); //输出zi,new出哪个用哪个
    
    • 父类构造方法 -> 子类构造方法
    • 子类构造方法有个默认的super();, super 只能有一个且在第一个语句
    • super 和 this 两种构造调用不能同时使用
    • 子类的.class中会有一个[[super_class]], 它指向父类
    • 子类对象当中包含了一个完整的父类对象结构

在这里插入图片描述

  • Java是单继承的,但可以多级继承,最顶端的类是Object
  • 抽象 abstract
    • 抽象方法所在的类必须是抽象类,但一个抽象类不一定含有抽象方法
    • 不能直接new抽象类
    • 抽象父类的构造方法只能通过子类的super()来执行
    • 当子类是抽象类时可以不用完全重载父类的抽象方法
  • 接口interface:公共规范标准
    • 编译生成的字节码文件仍然是.class

    • 可以包含:常量,抽象方法,默认方法,静态方法,私有方法

      • 抽象方法:必须是public abstract 连用 或者 省略
      • 默认方法:public default, 其中public可以省略, 会被实现类继承下并且可以被覆盖重写
      • 静态方法:public static, 不能通过实现类的对象来调用, 直接通过接口名来调用
      • 私有方法:解决默认(静态)方法之间重复代码问题
      • 常量:public static final(可以省略,但默认是这三个),必须赋值,大写
    • 接口不能直接使用,不许得有实现类来实现接口

    • 实现类必须覆盖重写接口的所有的抽象方法,否则自己必须是抽象类

    • 没有静态代码块和构造方法

    • 一个类可以实现多个接口

      • 若多个接口里面有重名的抽象方法,实力类只实现一个就行
      • 重复的默认方法时,实现类一定要对冲突的默认方法进行重写
      • 父类方法和接口默认方法冲突时,优先父类中的方法
    • 接口之间可以多继承

      • 多个父接口抽象方法重复,没关系
      • 多个父接口默认方法重复,字接口重写,而且要带着default
  • 多态:父类名称指向子类名称 或 接口名称指向实现类名称
    • 成员变量访问规则:等号左边是谁,先用谁,找不到向上找(编译看左边,运行看左边)
    • 成员方法访问规则:new 出来的谁,先用谁,没有向上找(编译看左边,运行看左边)
    • 好处:提高代码扩展性
    • 向上转型:Fu obj = new Zi();这时无法调用子类特有的方法
    • 向下转型:还原,Zi zi = (Zi) obj;
    • 判断父类引用对象本来是什么子类,instanceof
class Fu{
   int num = 10;
}
class Zi extends Fu{
    int num = 20;
}
public class Test {
    public static void main(String[] args) {
       Fu test = new Zi();
       System.out.println(test.num); // 10, 等号左边是谁,先用谁,找不到向上找
    }
}		
method(10); //不报错,自动类型转换
public void method(double num){
	System.out.println(num);
}
  • final:不可改变
    • 修饰类:当前类不能有子类
    • 修饰方法:不能被覆盖重写(对于类和方法来说,abstract和final不能同时使用,矛盾)
    • 修饰局部变量:不能修改,一次赋值终身不变。对于基本类型,不可变是数值不可变;对于引用类型来说是地址值不可改变,内容可以变。
    • 修饰成员变量:不会再给默认值,要么直接赋值,要么通过构造方法赋值
  • 成员内部类:内用外随意访问;外用内需要借助内部类对象;class内写class
    • 间接使用:在外部类的方法中使用内部类
    • 直接方式:外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();
    • 访问外部类成员变量:Outer.this.num
class Fu{
    class Zi{

    }
}

  • 局部内部类:定义在方法内,出方法不能使用
    • 如果想访问所在方法的局部变量,那么这个变量必须是有效final
  • 定义类时权限修饰符规则:
    • 外部类:public / default
    • 成员内部类:public / protected / default / private
    • 局部内部类:什么都不能写
  • 匿名内部类:接口名称 obj = new 接口名称() {覆盖重写所有抽象方法};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值