类与接口

 一、类

1.类的组成

        对象的属性(对象有什么)和对象的行为(对象能干什么)

2.定义

public class Student{
    //成员变量(对象属性)
    数据类型 变量名;
    ...
    //成员方法(对象行为)
    方法1;
    ...
    }

二、抽象类

1.什么是抽象类?

    在Java中,没有方法体的方法要写成抽象方法,具有抽象方法的类要写成抽象类。
【tips】:没有方法体指的是连{}都没有,无参构造方法不叫没有方法体!

2.特点

(1)抽象方法和抽象类要用关键字abstract修饰;
public abstract class 类名{
        ...
    public abstract void show(){
        ...;
    }
        ...
}
(2)抽象类多态:抽象类不能直接实例化,要用多态的形式创建对象;
(3)继承抽象类的子类必须重写抽象类中所有的抽象方法(因为不重写就继承了,继承过来自己又成抽象类了);
【tips】:抽象类中的抽象方法,可以限定子类必须完成某些动作。

三、接口

1.什么是接口?

接口是一种公共的规范标准,Java中的接口更多的体现在对行为的抽象上。

2.接口的组成

(1)常量:默认被public static final修饰;
(2)抽象方法:默认被public abstract修饰;
(3)默认方法(Java8新加)
    1)定义格式:用default修饰:
default 返回值类型 方法名(参数列表){
    ...;
}
    2)注意事项:①默认方法不是抽象方法!实现类不会被强制要求重写默认方法;重写默认方法时,就用写default了;
                            ②默认方法默认被public修饰,所以public可以省略。
(4)静态方法(Java8)
    1)定义格式:(同类一样)
public static 返回值类型 方法名(参数列表){
    ...;
}
    2)注意事项:①接口中的静态方法只能通过接口名调用,不能通过实现类名或对象名调用。
                            ②静态方法默认被public修饰,所以public可以省略。
(5)私有方法(Java9)
    1)为什么接口会有私有方法?
    Java8允许在接口中定义默认方法和静态方法,当两个默认方法或静态方法中含有一段相同的代码时,程序会考虑将这段代码抽取呈一个共性方法,而这个共性方法是不需要让别人使用的,这就需要用私有给隐藏起来,所以就有必要引入接口的私有方法。
    2)定义格式:
//非静态私有方法
private 返回值类型 方法名(参数列表){
    ...;
}

//静态私有方法
private static 返回值类型 方法名(参数列表){
    ...;
}

    3)注意事项:静态方法只能调用静态方法,而非静态方法可以调用静态方法也可以调用非静态方法,所以接口的静态方法只能调用静态私有方法。

3.特点

(1)接口要用关键字interface修饰:
public interface 接口名
(2)类与类可以继承,类与接口可以实现,类实现接口要用implements修饰:
public class 类名 implements 接口名
(3)接口类多态:接口没有构造方法,不能直接实例化,要用多态的形式创建对象,通过实现类进行实例化;
(4)接口的实现类要么重写接口的所有抽象方法,要么是个抽象类。
【tips】:接口A的实现类一般用 AImpl 来命名。

3.类与接口的关系

(1)类与类可继承:单继承、多层继承;
(2)类与接口可实现:单实现、多实现;
public class 类名 implements 接口1,接口2...
(3)接口与接口可继承:单继承、多继承
public interface 接口1 extends 接口2,接口3...

4.接口与抽象类的区别

(1)成员区别:抽象类有成员变量、常量、构造方法、get/set方法、抽象方法、非抽象方法,而接口只有常量(因为默认被final修饰)和抽象方法。
(2)设计理念区别:抽象类是对类进行抽象,包括属性和方法,而接口主要是对行为进行抽象。

四、类名、抽象类名、接口名作形参和返回值的情况

1.类名作

(1)形参:需要该类的对象作形参;
(2)返回值:返回的是该类的对象。

2.抽象类名作

(1)形参:需要该抽象类的子类对象作形参;
(2)返回值:返回的是该抽象类的子类对象。

3.接口名作

(1)形参:需要该接口的实现类对象作形参;
(2)返回值:返回的是该接口的实现类对象。

五、内部类

1.定义

内部类:在Outer类中定义一个Inner类,Inner类就叫内部类。

public class Outer{
    ...;
    修饰符 class Inner{
        ...;
    }
    ...;
}

2.访问特点

(1)内部类可以直接访问外部类的成员(包括被private修饰的成员,因为内部类也是外部类私有的)
(2)外部类不可直接访问内部类的成员,要想访问必须先创建内部类对象,通过内部类对象进行访问。

3.分类

    内部类根据定义的位置不同,分为:
(1)成员内部类:定义在成员位置;
(2)局部内部类:定义在成员方法里面。

4.匿名内部类——特殊的局部内部类

    new 类名/接口名(){
        重写方法;
    };//注意这里有 分号; !!!
【tips】:匿名内部类本质上就是继承了该类(实现了该接口)的子类(实现类)匿名对象!!!
                本质上是个对象!对象!对象!所以当类名/接口名作形参时,()可以直接用匿名内部类作形参!!!

全部评论

相关推荐

当年还在美团那个倒霉的 Peppr 团队工作时,我一直有个疑问:这群人每天到底在自嗨什么。每次开会一堆人围着一堆“看起来很高级”的文档转,模板统一、名词复杂、页数感人,每一页都在暗示一件事:“你不懂,是因为你不专业。”但现实是——代码照样写在 💩 山上,该出问题还是会出问题,这真的很逗,系统一出问题,文档的唯一作用就是证明:“我们当初确实认真写过文档。”所以本质区别到底是什么?是代码质量提升了,还是大家在精神层面完成了一次“工程师 cosplay”?有句话说得好潮水退去才知道谁在裸泳。还记得当时的马哥、明哥(图 1 左)最爱反复强调一句话:“所有场景一定要想到。”、“这个场景为什么没考虑到?”不过他们这些话我是真的听进去了。不然我也不会在一年多前就说:这个项目活不过两年。顺带一提,那段时间还有个固定节目。每次下楼,总能听见我明哥在吐槽不同的人。我从他身后绕过去,经常能听到他一边抽烟一边说:“xx 这小子太坑了,回头我一定要跟马哥说说。”于是深谙人情世故但真不会抽烟的我也会从口袋掏出一支低尼古丁含量的烟给自己点上,假意自己什么都没听到什么都不知道,只是来抽烟的。后来我才明白,这可能也是团队文化的一部分:问题永远在别人身上,而我们,永远在复盘里😂。
秋招白月光
点赞 评论 收藏
分享
01-19 15:14
已编辑
延安大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务