抽象类

java练习 抽象类和接口02

给你一囗甜甜゛ 提交于 2020-01-17 04:59:01
题目: 创建一个名称为Vehicle的接口,在接口中添加两个无参的方法start()和stop()。 在两个名称分别为Bike和Bus的类中实现Vehicle接口。 创建一个名称为interfaceDemo的类, 在interfaceDemo的main()方法中使用多态的方式创建Bike和Bus对象并访问其start()和stop()方法。 代码: public interface Vehicle { public void start(); public void stop(); } public class Bike implements Vehicle { @Override public void start() { System.out.println("Bike starting"); } @Override public void stop() { System.out.println("Bike stoping"); } } public class Bus implements Vehicle { @Override public void start() { System.out.println("Bus starting"); } @Override public void stop() { System.out.println("Bus stoping");

接口和抽象类

别等时光非礼了梦想. 提交于 2020-01-17 03:28:45
基于面向对象四大特性:抽象、封装、继承、多肽而言,定义类的过程就是抽象和封装的过程,而接口与抽象类则是对实体类进行更高层次的抽象,仅定义类的公共行为和特征。接口和抽象类的共同点是都不能被实例化,但可以定义引用变量指向实例对象。 由于java是单继承,因此抽象类在被继承时体现的时is-a关系,接口在被实现时体现的是can-do关系。由此可见,接口的出现完美的解决了java单继承的问题 与接口相比,抽象类通常是对同类事物相对具体的抽象,通常包含抽象方法、实体方法、属性变量。如果一个抽象类只有一个抽象方法,那它就等同于一个接口。is-a关系需要符合里氏代换原则,例如Eagle is Bird.Bird is an Object。 can-do关系需要符合接口隔离原则,实现类要有能力去实现并执行接口中定义的行为,例如Plane can fly.Bird can fly. 可以将fly定义为一个接口,Plane类和Bird类一起实现fly接口,而不是 把fly()作为一个抽象类的方法,再通过is-a的关系去继承抽象类。 从设计层面来说,抽象类是对类的抽象,是模板式设计,接口是对行为的抽象,是行为的规范,也可以说是一种契约式设计 在jdk1.8之前(不包含1.8),接口中不能有静态方法,而抽象类中因为有普通方法,所以也可以存在静态方法。 在JDK1.8及JDK1.8以后

c#中的interface abstract与virtual

笑着哭i 提交于 2020-01-17 01:13:11
interface用来声明接口 1 .只提供一些方法规约,不提供方法主体 如 public interface IPerson { void getName(); // 不包含方法主体 } 2 .方法不能用public abstract等修饰,无字段变量,无构造函数。 3 .方法可包含参数 如 public interface IPerson { void getAge( string s); } 一个例子(例1): public interface IPerson { IPerson(); // 错误 string name; // 错误 public void getIDcard(); // 错误 void getName(); // right void getAge( string s); // right } 实现interface的类 1 .与继承类的格式一致,如 public class Chinese:IPerson {} 2 .必须实现interface中的各个方法 例2,继承例1 public class Chinese:IPerson { public Chinese() {} // 添加构造 public void getName() {} // 实现getName() public void getAge( string s) {} // 实现getAge

C# 之抽象类和抽象方法

本秂侑毒 提交于 2020-01-17 01:10:26
概述:abstract 关键字 抽象类不能被实例化,抽象方法不能有方法体,抽象类中的所有抽象方法必须在子类中重写( override ), 一个抽象类可以同时包含抽象方法和非抽象方法。 abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。 在类声明中使用 abstract 修饰符以指示类只能是其他类的基类。 抽象类具有以下特性: 抽象类不能实例化。 抽象类可以包含抽象方法和抽象访问器。 不能用 sealed 修饰符修改抽象类,这意味着该类不能被继承。 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。 在方法或属性声明中使用 abstract 修饰符以指示此方法或属性不包含实现。 抽象方法具有以下特性: 抽象方法是隐式的 virtual 方法。 只允许在抽象类中使用抽象方法声明。 因为抽象方法声明不提供实实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如: public abstract void MyMethod(); 实现由 overriding 方法提供,它是非抽象类的成员。 在抽象方法声明中使用 static 或 virtual 修饰符是错误的。 除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。 在静态属性上使用 abstract 修饰符是错误的。 在派生类中,通过包括使用

C# 之抽象类和抽象方法

半世苍凉 提交于 2020-01-17 01:09:05
概述:abstract 关键字 抽象类不能被实例化,抽象方法不能有方法体,抽象类中的所有抽象方法必须在子类中重写( override ), 一个抽象类可以同时包含抽象方法和非抽象方法。 abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。 在类声明中使用 abstract 修饰符以指示类只能是其他类的基类。 抽象类具有以下特性: 抽象类不能实例化。 抽象类可以包含抽象方法和抽象访问器。 不能用 sealed 修饰符修改抽象类,这意味着该类不能被继承。 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。 在方法或属性声明中使用 abstract 修饰符以指示此方法或属性不包含实现。 抽象方法具有以下特性: 抽象方法是隐式的 virtual 方法。 只允许在抽象类中使用抽象方法声明。 因为抽象方法声明不提供实实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如: public abstract void MyMethod(); 实现由 overriding 方法提供,它是非抽象类的成员。 在抽象方法声明中使用 static 或 virtual 修饰符是错误的。 除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。 在静态属性上使用 abstract 修饰符是错误的。 在派生类中,通过包括使用

抽象类与抽象方法

二次信任 提交于 2020-01-17 01:07:37
抽象类是否至少要有一个抽象方法,我查了很多资料,结果都是:“抽象类允许(但不要求)抽象类包含抽象成员”。但是一个抽象类里不写抽象方法就没有意义了,既然如此,还不如直接写个普通类? 在一个抽象类里可以不声明抽象方法,这在语法上是没问题的,但实际来说,这样是没有任何意义的。也就是说,你为什么会选择写一个抽象类呢?当然是为了想某个方法能够被 OVERRIDE,以实现多态。后来查找 MSDN 结果如下: abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。 在类声明中使用 abstract 修饰符以指示类只能是其他类的基类。 【抽象类】具有以下特性:  抽象类不能实例化。  抽象类可以包含抽象方法和抽象访问器。  不能用 sealed 修饰符修改抽象类,这意味着该类不能被继承。  从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。在方法或属性声明中使用 abstract 修饰符以指示此方法或属性 不包含实现。 【抽象方法】具有以下特性:  抽象方法是隐式的 virtual 方法。  只允许在抽象类中使用抽象方法声明。  因为抽象方法声明不提供实实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如:  public abstract void MyMethod();  实现由 overriding

对抽象类和虚方法的区别

房东的猫 提交于 2020-01-17 00:42:14
抽象类定义: 它的作用就是产生子类的同时给于子类一些特定的属性和方法。 abstract修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用abstract修饰符以指示某个类只能是其他类的父类。标记为抽象或包含在抽象类中的成员必须通过从抽象类的子类来实现。 特性: 1.抽象类不能被实例化; 2.抽象类可以包含抽象方法和抽象访问器; 3.不能用sealed修饰符修饰; 4.从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现。 总结: ~抽象方法是隐式的虚方法; ~只容许在抽象类中使用抽象方法声明; ~因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号“{}”,实现由一个重写方法提供,此重写方法是非抽象类的成员; ~在抽象方法声明中使用static或virtual修饰符是错误的; ~除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样; ~在静态属性上使用abstract修饰符是错误的; ~在派生类中,通过包括使用override修饰符的属性声明,可以重写抽象的继承属性。抽象类定义: 它的作用就是产生子类的同时给于子类一些特定的属性和方法。 abstract修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用abstract修饰符以指示某个类只能是其他类的父类

Java面试题技术类一

柔情痞子 提交于 2020-01-17 00:40:38
1、面向对象编程的三大特性是什么? (1).继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继 承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增 加新的方法使之更适合特殊的需要。 (2).封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 (3).多态: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据这个String类提供了数值不可改变字符串而这个StringBuffer类提供的字符串进行修改当你知道字符数据要改变的时候你就可以使用StringBuffer典型地,你可以使用StringBuffers来动态构造字符数据 3、说出ArrayList,Vector,

Java面试题总结5

被刻印的时光 ゝ 提交于 2020-01-16 22:01:40
41. 成员变量与局部变量有哪些? 1.从语法形式上,看成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;成员变量和局部变量都能被final所修饰; 2.从变量在内存中的存储方式来看,成员变量是对象的一部分,而对象存在于堆内存,局部变量存在于栈内存 3.从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。 4.成员变量如果没有被赋初值,则会自动以类型的默认值而赋值(一种情况例外被final修饰但没有被static修饰的成员变量必须显示地赋值);而局部变量则不会自动赋值。 42. 静态方法和实例方法有何不同? 1.在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。 2.静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。 43. equals和==的区别? 通俗点讲:==是看看左右是不是一个东西。equals是看看左右是不是长得一样。如何记住嘛。如果单纯是想记住,==:等于。equals:相同

Java-面向对象的基础

坚强是说给别人听的谎言 提交于 2020-01-16 10:12:14
Java 继承继承的概念继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类具有父类的各种属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 继承的特性: 1.子类拥有父类非private的属性,方法和构造器。 2.子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。 3.子类可以用自己的方式实现父类的方法。 4.Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性。 5.提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。 Java 重写(Override)与重载(Overload)重写(Override)重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是