多态

本文详细介绍了Java中的继承特性,包括成员变量的访问规则、构造方法的调用、继承的优点与特点。同时,解释了final关键字的作用,用于修饰类、变量和方法。此外,阐述了方法重写和重载的区别,以及多态的概念、实现条件和好处。文章还通过实例展示了如何在实际编程中运用这些概念,如抽象类、抽象方法、多态以及final关键字在基本类型和引用类型上的应用。

1.继承中成员变量访问问题(父类成员变量名称和子类成员变量名称一致)
        继承中:父类成员变量名称和子类成员变量名称一致
            遵循"就近原则"
            1)先在子类局部位置查找,如果存在,就使用
            2)如果不存在,在子类的成员位置查找,如果存在,就使用
            3)如果子类的成员位置不存在,在父类的成员位置中找,有就使用
            4)如果父类成员位置没有,就没有这个变量,报错!

2.子类继承父类,如何访问构造方法?如果父类没有无参构造方法,如何访问

        继承中,构造方法不能被继承的;子类的所有的构造方法都默认访问父类的无参构造方法 :super() ;
        
        如果父类没有给出无参构造方法,子类的构造方法都会报错
        解决方案:
            1)手动给出父类的无参构造方法
            2)间接通过访问父类的有参构造方法,让父类进行数据初始化; super(xx) ;
            3)只要子类中的构造方法的一个能够让父类初始化即可!
            
            可以先通过本类的无参构造方法,间接访问本类的有参构造方法:this(xx),
            在通过本类的有参构造方法 :访问父类的有参构造方法:super(xx)
            

3.继承的好处以及特点有什么
        继承的好处:
                1)提高了代码的复用性
                2)提高了代码的维护性
                3)类与类之间产生继承关系,是"多态"的前提条件
                
        继承的特点:
                1)在Java中,只支持单继承,不支持多继承
                2)虽然不支持多继承,可以多层继承!

4.final关键字的特点有哪些
    final:状态修饰符,可以修饰类:该类不能被继承
    
    可以修饰变量,此时这个变量是常量,只能被赋值一次,不能再次更改了!    
            成员位置:
                    public static final int xx = 值;  传统方式定义常量        普通格式(编译时期常量)
                    public  final Student s = new Student() ; //实例(创建对象)变量 (运行时期常量)
                    
    修饰方法,此方法不被重写!

5.this和super的区别
        this:代表当前类的对象地址值引用
        super:代表父类空间标识(父类对象的地址值引用)
        
    this.变量名; 访问的本类的成员变量
    super.变量名; 访问的是父类的成员变量
    
    this.方法名() ;访问本类的成员方法
    super.方法名() ; 访问的父类的成员方法
    
    this() ; 访问本类的无参构造方法
    super() ;访问父类的无参构造方法
    
    this(xxx) ;访问本类的有参构造方法
    super(xxx);访问的父类的有参构造方法
        

6.方法重写和方法重载的区别
                            public String eat() {
                                return "xx" ;
                            }
                            
                            public String eat(){
                                
                            }
        Override:继承关系中,子类出现了父类一模一样的方法声明,子类的方法将父类的方法覆盖掉了,
                                                                                        使用子类的功能!
        Overload:定义多个方法的时候,这个方法(功能)可以提高代码的扩展性,可以针对同一个功能,传递不同类型的参数
                方法名相同,参数列表不同,和返回值无关!
                            参数类型不同,
                            参数个数不同
                            参数类型顺序...

什么是抽象类?
 *  在现实世界存在真实事物,本身就是概括性的事物,这个时候,为了将具体的事物的功能给出具体体现,那么当前概括性的事物中
 *  加入抽象-----abstract,并且它里面的一些功能仅仅只是声明,并不给出具体体现!

什么叫抽象方法?
 *          抽象方法就是没有方法体的方法;
 *          public  abstract 返回值类型 方法名(形式参数);
 *
 *       抽象类有一个特点:
 *              抽象类不能实例化-----不能 new
 *
 *            抽象类的子类:
 *                  1)是抽象类,也不能实例化!
 *                          如果仅仅存在父类,和子类,这个子类还是抽象类---毫无意义!  new 不了!
 *
 *                  2)研究的具体类: 可以实例化的!
 *                          对象的创建还是子类创建的!
 *
 *                              抽象的父类名 对象名 = new 子类名() ;   //抽象类多态
 *
 *                    抽象类的本质---->就是强制子类必须要将父类的中抽象功能,重写!

多态
 *      一个事物在不同时刻体现的不同形态(内存中的变化)

要使用多态,要遵循它的前提条件:
 *      1)必须存在继承关系 (没有继承关系,不谈多态!)
 *      2)必须有方法重写 (子类继承父类,需要将父类的功能覆盖掉)
 *          使用子类的功能;
 *      3)必须存在父类引用指向子类对象("向上转型")
 *              class Fu{}
 *              class Zi extends Fu{}
 *                      之前:Zi zi = new Zi() ;
 *           现在:多态: Fu f  = new Zi() ;
 *
 *
 * 在多态中,的成员访问特点:
 *       Fu f  = new Zi() ;
 *       非静态
 *      成员变量:编译看左,运行看左
 *      成员方法:编译看左,运行看右 :由于存在子类重写父类的功能,所以使用的子类的功能
 *      静态方法: 静态的东西都是跟当前类有关系:优先进内存(随着类的加载而加载)
 *                  静态方法--算不上方法重写:编译看左,运行看左
 *
 *       构造方法:父类先初始化,然后子类在进行初始化

多态的好处是什么?
 *      1)可以提高代码的复用性 (是由继承保证的)
 *      2)可以提高代码的扩展性(多态完成:父类引用指向子类对象:Fu f = new Zi()) ;

多态的弊端:
 *      不能访问子类的特有功能!
 *
 *      向上转型:父类引用指向子类对象
 *
 *      如果能够使用子类型,就可以访问它的功能!
 *
 *      解决方案:
 *          1)子类 引用 指向自己本身:子类对象
 *                  虽然可以访问,但是多态中,不推荐,因为重新new 对象,消耗堆内存空间
 *
 *          2)   将父类引用强制转换为子类引用 :向下转型 ,前提:必须存在向上转型
 *                  Fu f = new Zi() ;//向上转型
 *                  Zi z = (Zi)f ; //向下转型
 *
 *                  推荐2) :不会重新在堆内存中开辟空间,结束内存空间!

ClassCastException:类转换异常:属于运行时期异常!

public class DuoTaiDemo4 {
    public static void main(String[] args) {
            //多态创建对象
        Animal2 a = new Cat2() ; //堆内存中猫的实例 (猫是动物)
        Cat2 c = (Cat2)a ; //将猫还原了  (猫是猫)  向下转型

        a = new Dog2() ;//堆内存中是狗的实例(狗是动物)
        Dog2 d = (Dog2)a; //还原成狗了

     //  Cat2 c2 = (Cat2)a; //ClassCastException:类转换异常:属于运行时期异常!


    }
}

final关键字修饰基本类型/引用类型的区别
 *
 *
 *  final:本身:最终的,无法更改的 状态修饰符
 *
 *  当final修饰基本数据类型,基本数据类型的值不能再改变,只能赋值一次!
 *
 *  开发中,定义基本数据类型的常量:
 *          在一个类的成员位置:
 *                  public static final int xxx = xx ;
 *
 *   当final修饰引用数据类型,引用数据类型的地址值不能在改变!

 成员方法的分类:
 *      是否存在返回值,是否带参
 *
 * 根据具体需求然后定义相对应的功能!
 *     参数类型:
 *           基本类型/引用类型
 *     返回值类型:
 *          基本类型/引用类型

继承中成员方法的访问问题:
*       如果子类和父类的成员方法名称不一致,分别访问即可!
*
* 子类和父类的成员方法名称一致,
*           子类中存在,访问子类的;
* 如果不存在,访问父类,如果父类没有,报错!

有一个台灯:Lamp ,台灯有开灯的功能on,
 *          它里面有一个灯泡属性bubble ,灯泡有发亮的功能,红灯泡,绿灯泡分别可以发红光,可以发绿光,
 *
 *      使用面向编程方式去设计这个程序

public class Test {
    public static void main(String[] args) {


        //创建台灯类对象
        Lamp lamp = new Lamp() ;
        //父类引用指向子类对象
        Bubble bubble = new RedBubble() ;
        lamp.on(bubble);
        Bubble bubble2 = new GreenBubble() ;
        lamp.on(bubble2);
        System.out.println("-----------------");

        lamp.on(new RedBubble()) ;

        lamp.on(new GreenBubble()) ;
    }
}
public class RedBubble extends  Bubble {

        //发亮:发红光
        public void shine(){
            System.out.println("灯泡可以发红光...");
        }


}public class Lamp {

    //灯泡属性
    private Bubble bubble ;//灯泡属性


    //开灯的功能
    public  void on(Bubble bubble){ //开灯,灯泡要发亮
            bubble.shine();
    }
}public class GreenBubble extends Bubble {

    @Override
    public void shine() {
        System.out.println("灯泡可以发绿光了...");
    }
}public class Bubble {


    //发亮的功能
    public void shine(){
        System.out.println("灯泡可以发亮");
    }
}

 

下载前可以先看下教程 https://pan.quark.cn/s/a4b39357ea24 在网页构建过程中,表单(Form)扮演着用户与网站之间沟通的关键角色,其主要功能在于汇集用户的各类输入信息。 JavaScript作为网页开发的核心技术,提供了多样化的API和函数来操作表单组件,诸如input和select等元素。 本专题将详细研究如何借助原生JavaScript对form表单进行视觉优化,并对input输入框与select下拉框进行功能增强。 一、表单基础1. 表单组件:在HTML语言中,<form>标签用于构建一个表单,该标签内部可以容纳多种表单组件,包括<input>(输入框)、<select>(下拉框)、<textarea>(多行文本输入区域)等。 2. 表单数:诸如action(表单提交的地址)、method(表单提交的协议,为GET或POST)等属性,它们决定了表单的行为特性。 3. 表单行为:诸如onsubmit(表单提交触发的动作)、onchange(表单元素值变更触发的动作)等事件,能够通过JavaScript进行响应式处理。 二、input元素视觉优化1. CSS定制:通过设定input元素的CSS属性,例如border(边框)、background-color(背景色)、padding(内边距)、font-size(字体大小)等,能够调整其视觉表现。 2. placeholder特性:提供预填的提示文字,以帮助用户明确输入框的预期用途。 3. 图标集成:借助:before和:after伪元素或者额外的HTML组件结合CSS定位技术,可以在输入框中嵌入图标,从而增强视觉吸引力。 三、select下拉框视觉优化1. 复选功能:通过设置multiple属性...
【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)内容概要:本文围绕“基于深度强化学习的微能源网能量管理与优化策略”展开研究,重点探讨了如何利用深度强化学习技术对微能源系统进行高效的能量管理与优化调度。文中结合Python代码实现,复现了EI级别研究成果,涵盖了微电网中分布式能源、储能系统及负荷的协调优化问题,通过构建合理的奖励函数与状态空间模型,实现对复杂能源系统的智能决策支持。研究体现了深度强化学习在应对不确定性可再生能源出力、负荷波动等挑战中的优势,提升了系统运行的经济性与稳定性。; 适合人群:具备一定Python编程基础和机器学习背景,从事能源系统优化、智能电网、强化学习应用等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于微能源网的能量调度与优化控制,提升系统能效与经济效益;②为深度强化学习在能源管理领域的落地提供可复现的技术路径与代码考;③服务于学术研究与论文复现,特别是EI/SCI级别高水平论文的仿真实验部分。; 阅读建议:建议读者结合提供的Python代码进行实践操作,深入理解深度强化学习算法在能源系统建模中的具体应用,重点关注状态设计、动作空间定义与奖励函数构造等关键环节,并可进一步扩展至多智能体强化学习或与其他优化算法的融合研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值