Java继承与抽象类深入解析

版权申诉
0 下载量 89 浏览量 更新于2024-11-10 收藏 26KB ZIP 举报
1. 面向对象的三大基本特征:面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。面向对象的三大基本特征包括:封装、继承和多态。继承是其中的关键特性之一,它允许新创建的类(子类)自动获得已有类(父类)的属性和方法,从而实现代码复用。 2. Java继承的特性:Java语言采用的是单继承的模型,即一个类只能直接继承一个父类。这样做是为了保证类结构的清晰性,避免过于复杂的继承关系导致程序难以理解和维护。通过关键字“extends”来声明一个类是另一个类的子类。 3. 继承的作用:继承的主要目的是实现代码的复用和建立类之间的层次关系。当多个类具有相同的属性和方法时,通过继承可以将这些共性抽象到一个父类中,子类通过继承父类而自动获得这些属性和方法,简化了类的定义和代码的编写。 4. 继承与关联关系的区别:继承描述的是一种“is-a”的关系,即子类是父类的一种特殊形式。而关联关系则描述的是两个类之间的一种使用关系,比如一个类需要使用另一个类的对象作为其属性。继承的层次结构是静态的,而关联关系是动态的。 5. 抽象类的概念:抽象类是指不能被实例化(即不能直接创建对象)的类。它通常用于表示一个抽象概念,作为具有相似特性的类的模板。抽象类中可以包含一个或多个抽象方法,这些方法没有具体的实现代码(即没有方法体),子类需要提供这些抽象方法的具体实现。 6. 抽象方法的作用:抽象方法提供了一种强制性的机制,要求继承抽象类的子类必须实现这些方法。这样可以确保子类具有特定的功能,同时又保留了抽象类的通用性。 7. 实现抽象类的步骤:要实现一个抽象类,首先要定义抽象类,然后在其中声明抽象方法,最后创建继承抽象类的具体子类,并实现所有的抽象方法。如果一个子类不实现所有父类中的抽象方法,那么这个子类也必须声明为抽象类。 8. 举例说明继承和抽象类的应用:以水果和苹果的关系为例,水果可以被视为一个抽象类,它定义了所有水果共有的属性和方法,比如“颜色”和“味道”等。苹果继承了水果类,并提供了这些抽象方法的具体实现,比如具体的颜色值和味道描述。这样的设计既保证了代码的复用,又使得类的层次结构清晰。 通过以上内容,我们可以深入理解Java语言中的继承机制和抽象类的用法。继承不仅使得代码更加简洁高效,还能通过抽象类提高代码的可维护性和可扩展性。在实际开发中,合理利用继承和抽象类可以大大提升软件开发的效率和质量。

module Duty_Period_Adjust_module ( CLK, RSTn, AddDuty_In, SubDuty_In, AddPeriod_In, SubPeriod_In, Duty, Count_P ); input CLK; input RSTn; input AddDuty_In; //Add Duty Ratio input SubDuty_In; //Subtract Duty Ratio input AddPeriod_In; //Add Period input SubPeriod_In; //Subtract Period output reg [7:0]Duty; //Duty Ratio of PWM output reg [23:0]Count_P; //period of PWM = Count_P/50_000_000 wire neg_AddDuty; wire neg_SubDuty; wire neg_AddPeriod; wire neg_SubPeriod; Jitter_Elimination_module U1 ( .CLK( CLK ) , .RSTn( RSTn ) , .Button_In( AddDuty_In ) , //While AdjtDuty_In from 1 to 0, neg_AddDuty = 1 .Button_Out( neg_AddDuty ) ); Jitter_Elimination_module U2 ( .CLK( CLK ) , .RSTn( RSTn ) , .Button_In( SubDuty_In ) , //While SubDuty_In from 1 to 0, neg_SubDuty = 1 .Button_Out( neg_SubDuty ) ); Jitter_Elimination_module U3 ( .CLK( CLK ) , .RSTn( RSTn ) , .Button_In( AddPeriod_In ) , //While AddPeriod_In from 1 to 0, neg_AddPeriod = 1 .Button_Out( neg_AddPeriod ) ); Jitter_Elimination_module U4 ( .CLK( CLK ) , .RSTn( RSTn ) , .Button_In( SubPeriod_In ) , //While SubPeriod_In from 1 to 0, neg_SubPeriod = 1 .Button_Out( neg_SubPeriod ) ); always @ ( posedge CLK or negedge RSTn ) begin if( !RSTn ) Duty <= 'd50; else if( neg_AddDuty == 1'b1 ) if( Duty == 'd100 ) Duty <= 'd0; else Duty <= Duty + 'd10; else if( neg_SubDuty == 1'b1 ) if( Duty == 'd0 ) Duty <= 'd100; else Duty <= Duty - 'd10; else Duty <= Duty; end /******************* While Count_P = 500_000, Period of PWM = 10ms, Frequency of PWM = 100HZ ; While Count_P = 250_000, Period of PWM = 5ms, Frequency of PWM = 200HZ ; While Count_P = 50_000, Period of PWM = 1ms, Frequency of PWM = 1000HZ ; *******************/ always @ ( posedge CLK or negedge RSTn ) begin if( !RSTn ) Count_P <= 'd250_000; else if( neg_AddPeriod == 1'b1 ) begin if( Count_P == 'd500_000 ) Count_P <= 'd50_000; else Count_P <= Count_P + 'd50_000; end else if( neg_SubPeriod == 1'b1 ) begin if( Count_P == 'd50_000 ) Count_P <= 'd500_000; else Count_P <= Count_P - 'd50_000; end else Count_P <= Count_P; end endmodule

142 浏览量