类与对象:抽象类、Object类和内部类

一.抽象类

1.概念

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类也是类,也具备类所拥有的特性。

2.语法规则

使用abstract来修饰抽象类,例子:

Shape shape=new Shape();   //代码会报错


 

public abstract class Shape {
    public abstract void draw();
}


3.特性

3.1 在抽象类里的抽象方法可以没有具体实现,但抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类;
3.2 如果一个类中有抽象方法,那么这个类必须是抽象类;

public abstract class Shape {
    public abstract void draw();
}
//还是刚刚的例子


3.3 抽象类不可以实例化;

Shape shape=new Shape();   //代码会报错


3.4 抽象方法不能被final和static修饰,抽象方法也不是private的。

二.Object类

1.概念

Object是Java默认提供的一个类。Object类是Java中所有类的父类。

2.类中的方法

方法描述
protected Object clone()创建并返回一个对象的拷贝
boolean equals(Object obj)比较两个对象是否相等
protected void finalize()当 GC (垃圾回收器)确定不存在对该对象的有更多引用时,由对象的垃圾回收器调用此方法。
Class<?>getClass()获取对象的运行时对象的类
int hashCode()获取对象的 hash 值
void notify()唤醒在该对象上等待的某个线程
void notify All()唤醒在该对象上等待的所有线程
String toString返回对象的字符串表示形式
void wait()让当前线程进入等待状态。直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
void wait(long timeout)让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过参数设置的timeout超时时间。
void wait(long timeout,int nanos)与 wait(long timeout) 方法类似,多了一个 nanos 参数,这个参数表示额外时间(以纳秒为单位,范围是 0-999999)。 所以超时的时间还需要加上 nanos 纳秒。

三.内部类

1.概念

一个类中嵌套了另一个类,例子:

public class OutClass {
     class InnerClass{

     }
}

注意:内部类和外部类共用同一个java源文件,但是经过编译之后,内部类会形成单独的字节码文件。

2.内部类的分类

2.1 实例内部类

2.1.1 创建

未被static修饰的成员内部类

public class OutClass {
     class InnerClass{

     }
}
public static void main(String[] args) {
    // 创建实例内部类对象
    OutClass.InnerClass innerClass1 = new OutClass().new InnerClass();

    //也可以先将外部类对象先创建出来,然后再创建实例内部类对象
    OutClass outClass = new OutClass();
    OutClass.InnerClass innerClass2 = outClass.new InnerClass();
}
2.1.2 注意事项

1. 外部类中的任何成员都可以在实例内部类方法中直接访问;
2. 实例内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束;
3. 在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名的成员,必须:外部类名称.this.同名成员 来访问;

OutClass.this.InnerClass.XX


4. 实例内部类对象必须在先有外部类对象前提下才能创建;
5. 外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建内部类的对象。

2.静态内部类

2.2.1 创建

被static修饰的内部成员类称为静态内部类。

public class OutClass{
    static class InnerClass{
    
    }
}
public static void main(String[] args) {
    // 静态内部类对象创建 & 成员访问
    OutClass.InnerClass innerClass = new OutClass.InnerClass();
    innerClass.methodInner();
}
2.2.2 注意事项

1. 在静态内部类中只能访问外部类中的静态成员;

2. 创建静态内部类对象时,不需要先创建外部类对象。


3.局部内部类

2.3.1 创建

定义在方法中的类,基本不用

public class OutClass {
    public void method(){
        class InnerClass{
            
        }
    }
}

2.3.2 注意事项

1. 局部内部类只能在所定义的方法体内部使用;

2. 不能被public、static等修饰符修饰;

4.匿名内部类

class Out {
    public void test() {
        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值