栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

抽象类【详细】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

抽象类【详细】

about Me

欢迎各位读者访问,大家一起学习。

优秀是一种习惯♡♡♡

做更好的自己!

本人见识有限,写到博客难免有错误或疏忽的地方,还望各位大佬多多指点,在此表示感激不尽。♡♡♡


一:抽象类 1. 什么是抽象类?
  1. 类和类之间具有共同特征,将这些共同特征抽取出来,形成的就是抽象类
  2. 如果一个类没有足够的信息来描述一个具体的对象,这个类就是抽象类。
  3. 因为类本身就是不存在的,所以抽象类无法创建对象,也就是无法实例化。

问题:既然抽象类是无法创建对象,无法实例化,那是用来干嘛的???

抽象类是用来被子类继承的。

2. 抽象类属于什么类型?
  • 抽象类属于引用数据类型
3. 抽象类怎么定义?

关键字:abstract

语法:【修饰符列表】 abstract class 类名{

​ 类体

​ }

4. 思考? 4.1 final和abstract能联合使用吗?
不能联合使用,因为被final关键字修饰过的类是无法继承的,而前面说到abstract就是用来被子类继承的。这两个关键字是对立的
//会报错,因为final和abstract不能联合使用
//final abstract class Person{

//}
4.2 抽象类的子类还可以是抽象类吗?

可以是抽象类

//定义一个抽象类Person
abstract class Person{

}
//抽象类Student继承抽象父类Person
abstract class Student extends Person{

}
4.3 抽象类中有构造方法吗?

抽象类虽然不能实例化,但是抽象类有构造方法,这个构造方法是给子类提供的。因为抽象就是被用来继承的,子类继承父类,子类的构造方法中的第一句默认是super();

//定义一个抽象类Person
abstract class Person {
    //父类无参构造
    Person() {

    }
}

//抽象类Student继承抽象父类Person
abstract class Student extends Person {
    //子类无参构造
    Student() {
        //默认第一句就是调用父类的无参构造
        super();
    }
}
二:抽象方法 1. 什么是抽象方法?
  • 抽象方法就是在抽象类中没有实现的方法,没有方法体的方法。
    1. 没有方法体,以分号结尾;
    2. 方法中有abstract关键字
    //定义一个抽象方法eat();
    public abstract void eat();

2. 思考? 2.1 抽象类中一定要有抽象方法吗?

抽象类中不一定有抽象方法,但是有抽象方法必须得在抽象类中。 抽象方法中还可以有非抽象方法

//定义一个抽象类Person01
abstract class Person01{
    //定义一个抽象方法eat();
    public abstract void eat();
    //非抽象方法
    public void sleep(){
        
    }
}
2.2 如何调用?

使用多态的方式调用,父类的引用指向子类的对象。

public class AbstractTest02 {
    public static void main(String[] args) {
        //使用多态的方式创建对象
        Person01 person01 = new Ceshi();
        //调用eat方法【编译看左,运行看右】
        person01.eat();     //吃
    }
}
//定义一个抽象类Person01
abstract class Person01{
    //定义一个抽象方法eat();
    public abstract void eat();

}
//非抽象类继承抽象类
class Ceshi extends Person01{
    //覆盖重写抽象类中的抽象方法
    @Override
    public void eat() {
        System.out.println("吃");
    }
}

2.3 什么是面向抽象编程?

顾名思义,面向抽象编程也就是不在面向具体的类,而是面向抽象类,让设计者不在关心具体的实现。可以降低程序的耦合度,提高程序的扩展力。

3. 结论: 3.1 非抽象类继承抽象类,必须实现/重写抽象类中的抽象方法。

实现格式: 去掉 abstract 加上 方法体

//定义一个抽象类Person01
abstract class Person01{
    //定义一个抽象方法eat();
    public abstract void eat();

}
//非抽象类继承抽象类
class Ceshi extends Person01{
    //实现抽象类中的抽象方法
    @Override
    public void eat() {
    }
}
3.2 抽象类不能被实例化,只有抽象类的非抽象子类可以创建对象。
public class AbstractTest03 {
    public static void main(String[] args) {
        // 抽象类不能实例化,如果实例化就会报错
        // Test test = new Test();     //报错
    }
}
//定义一个抽象类Test
abstract class Test{
    
}
3.3 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
//定义一个非抽象类Test1
//class Test1{
    //定义一个抽象方法method,一个类中如果有抽象方法那么这个类必须是抽象类
    //public abstract void method();    //报错
//}
4. 权限修饰符
                本类	     同一个包下的类		不同包下的子类	    不同包下的无关类
private		     √
默认		        √		        √
protected	     √		          √				    √
public		     √		          √					√			       √
5. 面试题:
java语言中凡是没有方法体的方法都是抽象方法吗?【判断题】

不对,错误的。Object类中有很多方法都没有方法体,都是以;结尾的,但是他们都不是抽象方法

例如: public native int hashCode(); 这个方法底层调用了C++写的动态链接程序,修饰符中没有abstract,有一个native,表示调用JVM本地程序。

三:思维导图


                                                      不要在最能吃苦的年纪选择了安逸!!!        — Tornado♥

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/532117.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号