Java基础笔记

Java常用包

Java.lang:语言包,如String,Math,System和Thread。
java.util:工具包,Arrays,List,Set
java.io:输入输出包
Java.net:网络函数包
java.sql:jdbc接口包。jdbc相关接口就写在这个包里。

向上转型

把一个子类类型安全的的变为父类类型的赋值,称为向上转型。

Student s= new Student();
Person p=s

向下转型

把一个父类类型强制转型为子类类型,就是向下转型

Person p1 = new Student(); // upcasting, ok
Person p2 = new Person();
Student s1 = (Student) p1; // ok
Student s2 = (Student) p2; // runtime error! ClassCastException!

Person类型p1实际指向Student实例,Person类型变量p2实际指向Person实例。在向下转型的时候,把p1转型为Student会成功,因为p1确实指向Student实例,把p2转型为Student会失败,因为p2的实际类型是Person,不能把父类变为子类,因为子类功能比父类多,多的功能无法凭空变出来
利用instanceof,再向下转型前可以先判断

Person p=new Student();
if(p instanceof Student){
Student s=(Student)p;

区分继承和组合

继承:是is关系,比如:Person和student。

class Student extends Person{}

组合:是has关系,比如Student和book。

class Book(){}
class Student(){
Book book;
}

protected

继承有个特点,子类无法访问父类的private字段和private方法,这使得继承作用被削弱,用protect修饰的可以被子类访问,protect把访问权限控制再继承树内部

class Person(){
protect String name;
protect int age;
}
class Student extends Person{
public String Hello(){
return "Hello"+name;}
}

构造方法

在Java中,任何class的构造方法,第一行语句必须是调用父类的构造方法,如果没有明确的调用父类的构造方法,编译器会自动给我们加上一句super(); 如果父类没有默认的构造方法,子类就必须显式的调用super()并给出参数以便让编译器定位到父类的一个合适的构造方法。

final修饰符。

final阻止继承,被final修饰的类,字段,方法为终类,不能被继承和修改

class final class String(){}

多态

Java的实例方法调用是基于运行时的实际类型的动态调用。而非变量的声明类型。

public class Main {
    public static void main(String[] args) {
        Person p = new Student();
        p.run(); // 应该打印Person.run还是Student.run?
    }
}

class Person {
    public void run() {
        System.out.println("Person.run");
    }
}

class Student extends Person {
    @Override
    public void run() {
        System.out.println("Student.run");
    }
}

实际上最后还是调用的Student的run方法,因为实例是Student

abstract:抽象

只定义了方法,没有具体的执行代码,这个方法就是抽象方法。因为不能执行抽象方法,这个类也必须声明为抽象类。抽象类无法被实例化。,为抽象类本身被设计成只能用于被继承,因此,抽象类可以强迫子类实现其定义的抽象方法,否则编译会报错。因此,抽象方法实际上相当于定义了“规范”。
如果不实现抽象方法,则该子类仍是一个抽象类;

interface:接口

只有抽象方法,没有字段的抽象类叫接口。(可以有静态字段,但必须为final类型

abstract class Person {
    public abstract void run();
    public abstract String getName();
}
变成:
interface Person {
    void run();
    String getName();
}

抽象类只能被单继承,接口可以被多继承

static:静态字段和静态方法

静态字段和方法属于类,不属于实例,所有实例都可以共享静态字段和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值