c#中请说明类的三大特性,并举例说明类的继承和多态。
发布网友
发布时间:2022-05-12 05:27
我来回答
共2个回答
热心网友
时间:2022-04-22 13:42
以控件来说
封装:你用那些控件,只需要调用具体的属性和方法,对怎么呈现的根本不需要了解,这就是封装
继承:有个Control基类,封装了常用的方法和属性,所有控件都是继承自它,而且都会有这些属性和方法,这就是继承
多态:Control类是继承自object,object有个ToString()方法,但是你每个控件调用一次就会知道,输出字符串是不一样的,因为它们内部重写(override)了ToString()方法.每个控件还有很多同名,但不同参数或者不同返回值的方法(重载),这就是多态
热心网友
时间:2022-04-22 15:00
1、Java应用程序与Applet程序的区别?
Java应用程序与Applet程序的区别在于运行方式的不同。答:Java Application是完整的程序,需要独立的解释器来解释运行;而Java Applet则是嵌在HTML编写的Web页面中的非独立运行程序,由Web浏览器内部包含的Java解释器来解释运行。
在源程序代码中两者的主要区别是:任何一个Java Application应用程序必须有且只有一个main方法,它是整个程序的入口方法;任何一个Applet小应用程序要求程序中有且必须有一个类是系统类Applet的子类,即该类头部分以extends Applet结尾。
2、抽象类是否能生成具体对象?其存在的意义?
不能生成具体对象。在面向对象领域,抽象类主要用来进行类型隐藏。首先,抽象类在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。其次,在抽象类的定义中,我们可以赋予方法的默认行为。使用抽象类来定义允许多个实现的类型,比使用接口有一个明显的优势:抽象类的演化比接口的演化要容易的多。在后续的发行版中,如果希望在抽象类中增加一个方法,只增加一个默认的合理的实现即可,抽象类的所有实现都自动提供了这个新的方法。对于接口,这是行不通的。虽然可以在骨架实现类中增加一方法的实现来解决部分问题,但这不能解决不从骨架实现类继承的接口实现的问题。由此,设计公有的接口要非常谨慎,一旦一个接口被公开且被广泛实现,对它进行修改将是不可能的。
3、方法(或者函数)重载与覆盖的区别?
覆盖”指的是重新定义基类的方法,使得该方法在派生类中有着不同的含义。“重载”指的是赋予方法名两个定义,解析出来有不同的参数列表。重载可以存在于任何类中, 不管定义类时是否明确指定了基类。 另一方面,如果派生类的方法拥有不同的参数数目,或者如果某个参数类型不同于基类中的地,则派生类会拥有这两个方法,这时就是“重载”。重载时也可以不涉及到基类,只要在类定义中同时给出两个方法定义即可。 相同点: 被覆盖和重载的函数的函数名必须是一样的; 不同点: 覆盖的函数的函数参数表必须和被覆盖的函数的参数表一样,重载的函数的函数参数表必须和被重载的函数的函数参数表不一样。
4、构造方法为什么经常需要重载?
构造方法是一种特殊的方法,与一般的方法不同是:1.一个构造函数是对象被创建时初始对象的成员函数。它具有和它所在的类完全一样的名字。一旦定义好一个构造函数,创建对象时就会自动调用它。它没有返回类型,甚至连void也没有。这是因为一个类的构造函数的返回值的类型就是这个类本身。2.构造方法的调用是在创建一个对象时使用new操作进行的。构造函数的任务是初始化一个对象的内部状态,所以用new操作符创建一个实例后,立刻就会得到一个清楚、可用的对象。 3.不能被static、final、synchronized、abstract和native修饰。构造方法不能被子类继承。 构造方法可以被重载。没有参数的构造方法称为默认构造方法,与一般的方法一样,构造方法可以进行任何活动,但是经常将他设计为进行各种初始化活动,比如初始化对象的属性。在Java中,任何变量在被使用前都必须先设置初值.Java提供了为类的成员变量赋初值的专门功能:构造方法(constructor) 构造方法是一种特殊的成员方法,它的特殊性反映在如下几个方面:(1)构造方法名与类名相同. (2)构造方法不返回任何值,也没有返回类型.不能定义为void,在方法名前面不声明方法类型。(3)每个类可以有零个或多个构造方法. (4)构造方法在创建对象时自动执行,一般不能显式地直接调用. (5)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。(6)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。(7)构造方法可以重载,以参数的个数,类型,或排列顺序区分。
5、构造函数(方法)为什么必须与类名同名?
1.构造函数的命名必须和类名完全相同;在java中普通函数可以和构造函数同名,但是必须带有返回值。
2.构造函数的功能主要用于在类的对象创建时定义初始化的状态.它没有返回值,也不能用void来修饰.这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择.而其他方法都有返回值.即使是void返回值,尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的.
3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用.
4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的.而一般方法不存在这一特点
5当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象,当一个类没有定义任何构造函数,C#编译器会为其自动生成一个默认的无参的构造函数。
6、为什么不能说java是严格的面向对象语言或者纯面向对象语言呢?
就java本质而言,是面相对象的,但是你有没有发现,java也不全是,比如说基本类型,int,那他就是整型而不是对象,转换类型是还得借助包装类。Java的缺点公认有如下三点:(1)存在非对象的数据类型;(2)不能够用一种描述方法来表达各种类(Class);(3)无法继承2个以上的类的装配。虽然也有人认为编程语言应该是一个什么样子会因人而异,不应该算成缺点。不过,上述三点却可以导致编程人员使用混乱,降低源码的可读性及程序的可维护性。
7、举例说明继承机制?说明继承的意义?
在现实生活中的继承,可以理解为儿子继承了父亲的财产,即财产重用;面向对象程序设计中的继承,则是代码重用;继承是利用现有的类创建新类的过程,现有的类称作基类(或父类),创建的新类称作派生类(子类)。最高层是最普遍的、最一般的情况,往下每一层都比上一层更具体,并包含有高层的特征,通过这样的层次结构使下层的类能自动享用上层类的特点和性质;继承其实就是自动地共享基类中成员属性和成员方法的机制。
在Java中实现继承需要使用到extends关键字;
实现继承的一般语法是:
[访问修饰符] class 派生类名 extends 基类名 {
成员列表
}
实现继承示例
如:
class Student extends Person
{
……
}
class Person { //定义人类
public String mName; //姓名
public int mAge; //年龄
public void dining() //吃饭的方法
}
class Student extends Person { //学生类继承于人类
public float mGrade; //成绩
public void examination() //考试的方法
}
class Teacher extends Person { //教师类继承于人类
public float mSalary; //薪水
public void prelection() //上课的方法
}
public class InheritanceDemo { //该类用于容纳main方法
public static void main(String[] args) {
Student std = new Student(); //实例化学生对象
std.mName = "张三"; std.mAge = 18; //为姓名和年龄赋值,访问的是父类中的成员
std.dining(); //调用吃饭的方法,访问的是父类中的成员
std.examination(); //调用考试方法,访问的是子类中的成员
Teacher tea = new Teacher(); //实例化教师对象
tea.mName = "谭浩强"; tea.mAge = 65;
tea.dining();
tea.prelection();
}
}
当今软件设计的特征:软件规模越来越大;软件设计者越来越多;软件设计分工越来越细。
引入继承,实现了代码重用;引入继承,实现了递增式的程序设计。继承是能自动传播代码和重用代码的有力工具;继承能够在某些比较一般的类的基础上建造、建立和扩充新类;
能减少代码和数据的重复冗余度,并通过增强一致性来减少模块间的接口和界面,从而增强了程序的可维护性;能清晰地体现出类与类之间的层次结构关系。
8、接口与抽象类的区别?
首先,abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。
其次,在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个*,必须使用委托,但是这会 增加一些复杂性,有时会造成很大的麻烦。
9、什么是包?java中包的意义?
简单一点就是文件夹,可以把包看作是管理类文件的文件夹,使用原因是项目越来越大,文件和类越来越多。使用包的好处也很明显:
第一 :当Java源文件多时,可以通过声明包的形式分类存放,这样有利于查找;
第二 :当有Java源文件同名时,通过使用声明包的形式存放,这样也可以不免同名冲突。
10、举例说明继承机制?比较继承与封装之间的关系?
所谓封装,就是将属性和方法*到一起,封装到一个对象中去
继承,是代码重用;继承是利用现有的类创建新类的过程