文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java的态和抽象类是什么

2023-06-29 12:10

关注

这篇文章主要为大家展示了“Java的态和抽象类是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java的态和抽象类是什么”这篇文章吧。

多态:

我们知道Java的三大特性:封装、继承、多态。前两个之前在Java入门(六)已经讲到,现在来讲多态这个特性。

什么是多态?

多态顾名思义即为多种形态的意思

Java中多态的含义:

发送消息给某个对象,让这个对象自行决定采用哪种行为响应这个消息

子类对象的引用赋值给父类引用变量来实现动态的方法调用

Java中形成多态的前提:

继承

父类方法的重写

向上转型

我对多态的解释:

比如我们,是人,也是学生,也是年轻人,我可以用人的身份去做事情,也可以用学生的身份去买学生票,也可以用年轻人的身份做公益,这样我们可以通过不同的形态去做不同的事情。这样是不是更好理解一点?

注意:

多态前提条件:必须有子父类关系。

在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

多态的定义与使用格式:

父类类型 变量名=new 子类类型();

多态中成员的特点:

多态的转型:

使用格式:父类类型 变量名=new 子类类型();

适用场景:当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作。

适用场景:当要使用子类特有功能时。

代码解释:

public class Person {     //人类,作为父类使用    public void speak(){        System.out.println("我们都是一个人");    }}public class Student extends Person{    //继承父类,相当于我们是学生,有人的方法    @Override    public void speak(){        System.out.println("我是人类中的学生");    }}public class Child extends Person{   //继承父类,相当于我们是孩子,有孩子的行为    @Override    public void speak(){        System.out.println("我是人类中的孩子");    }}//测试类public class TestMain {    public static void main(String[] args) {//父类类型 变量名=new 子类类型();        Person p = new Student();   //子类对象的引用赋值给父类         p.speak(); //多态 相当于这里使用的是Student的方法。输出我是人类中的学生        //我作为人,我用学生的身份,说出:我是人类中的学生Person p = new Child(); p.speak();  //输出:我是人类中的孩子//我作为人,用孩子的身份,说出我是人类中的孩子    }}//这段代码,我们用到了 继承,重写,向上转型,因为多态本来就是向上转型的过程

多态的作用:介绍完多态,讲讲多态有什么用呢?为什么多态可以作为Java的三大特性。肯定是有原因的:

这里给大家介绍一下什么是多态机制?Java语言是如何实现多态的?(可能有点难以理解,本人对于该内容也没用理解充分,但这也是面试会考的题)

所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒 底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的 方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而 导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时 所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。 多态分为编译时多态和运行时多态。其中编辑时多态是静态的,主要是指方法的 重载,它是根据参数列表的不同来区分不同的函数,通过编辑之后会变成两个不 同的函数,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来 实现的,也就是我们所说的多态性。

对于多态的理解,还可以参考一段代码:

class People{     //父类    public void eat(){        System.out.println("我们会吃饭");    }}class Student extends People{  //继承父类    @Override    public void eat(){        System.out.println("我会吃肉");    }    public void study(){        System.out.println("我们要好好学习");    }}class Teacher extends People{     //继承父类    @Override    public void eat(){        System.out.println("老师会吃蔬菜");    }    public void teach(){        System.out.println("老师要认真上课");    }}//测试类:public class TestMain {    public static void main(String[] args) {        People p=new Stu();      //子类对象的引用赋值给父类         p.eat();       //输出: 我会吃肉    }}

抽象类:

什么是抽象类?

普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。

抽象方法:

在所有的普通方法上面都会有一个“{}”,这个表示方法体,有方法体的方法一定可以被对象直接使用。而抽象方法,是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰。也就是说,抽象类里面的抽象方法,可以不写,在被继承后,再重写。

抽象类声明关键字: abstracat

定义一个抽象类:

public abstract class studnet{//定义一个抽象类public void study(){                         //普通方法System.out.println("我会学习");}public abstract void eat();         //抽象方法,没有方法体,有abstract关键字做修饰}//注意: 有抽象方法,这个类必须是抽象的!!!

举例解释:形状类Shape需要提供用于计算面积和周长的方法,但是形状本身没有被确定,那么计算周长和面积的方法就无法确定,此时我们就需要使用抽象类和抽象方法。

由于Shape类计算周长和面积的方法无法确定,那么就可以将这样的方法声明为抽象的,以便在具体的子类中进行实现。

//定义一个shape类,但是没有具体的形状,所以我们定义成抽象类public abstract class Shape {    private int a;    public abstract void area(){}     //求面积的方法    public abstract void perimeter();   //求周长的方法    public Shape() {    //无参构造    }    public Shape(int a) {        this.a = a;    }}
//计算圆形面积的子类public  abstract class shape {    //有抽象方法的类,则一定是抽象类,需要关键字abstract修饰        private int a;        public abstract void area();     //求面积的方法,没有方法体的方法,需要关键字abstract修饰        public abstract void perimeter();   //求周长的方法}//创建计算圆面积和周长的子类,并继承抽象类shape,并重写shape内的方法public class Circle extends shape{    public static double pi = 3.14;    private double r;  //半径    @Override    public void area() {        System.out.println("圆的面积:"+Circle.pi*this.r*this.r);    }    @Override    public void perimeter() {        System.out.println("圆的周长为:"+2*Circle.pi*this.r);    }    public Circle() {    }    public Circle(double r) {  //        this.r = r;    }}//测试类:public class TestMain {    public static void main(String[] args) {        Circle c = new Circle(5);        //传入半径为:5        c.area();        c.perimeter();    }}//输出结果: 圆的面积:78.5//圆的周长为:31.400000000000002

抽象方法和抽象类的注意事项:

简洁总结:

普通类和抽象类有哪些区别?

以上是“Java的态和抽象类是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯