类的继承总结

2019-03-28 21:47|来源: 网络

 6月29日 类的继承总结:  
 
1、继承的格式:  
 
1.1继承的关键字:extends  
 
1.2继承的格式: public class 类名(子类、超类、派生类) extends 类名(父类、基类){  
 
}  
2、子类继承的属性和方法  
 
2.1子类继承了父类所有的属性和方法(public,protected,private,默认的)。  
 
2.2子类若和父类在同一个包下,则只有私有的属性和方法不能在子类中和子类的对象中调用。  
 
2.3子类和父类不同包,子类中能调用共有的和受保护的属性和方法;子类的对象能调用的对象也有公有的属性和方法。  
 
2.4子类的继承在生活中的应用:比如学生,他们的行为不一定只有学习,可以继承一个学生类,然后在子类中写该学生自己的行为,比如说打篮球,打游戏等等。。  
 
3、方法重写  
 
3.1方法重写的条件:1、必须要存在继承关系 2、返回值数据类型,方法名,参数个数,参数类型,参数顺序必须一样 3、子类重写方法的访问修饰符可以大于或者等于父类方法的访问修饰符  
 
3.2如何调用重写的方法:优先调用子类的方法,如果子类没有,则调用父类的。  
 
3.3什么情况下使用方法重写?  
一个学生的学习方法可能不止一种,父类中的study()方法可能是:  
public void study(){  
 
System.out.println(this.name+"使用书本进行学习!");  
 
}  
 
而继承的子类中可以是:  
public void study(){  
 
System.out.println(this.name+"使用计算机进行学习!");  
 
}  
 
   在对象的同一个行为稍有不同的情况下,可以使用方法重写。  
 
4、自动转型  
 
4.1要实现自动转型必须存在继承关系。  
 
4.2自动转型的两种格式  
1. 父类名 对象名 = new 子类构造方法();  
例如:Student stu = new UNStudet();  
2.public 返回值数据类型  方法名(父类名 对象名){  
对象名.调用父类中定义过的方法();  
}  
 
父类名 对象名A = new 子类构造方法();  
子类名 对象名B = new 子类构造方法();  
 
方法名(对象名A);  
方法名(对象名B);  
 
4.3    自动转型引起编译错误的原因是:1.编译机制的问题。 2.Java在编译的的时候,只会根据对象名的类型进行编译。会将你调用的方法,拿到父类中进行一一比较,如果发现没有在父类中定义的方法,则直接抛出编译错误。但在运行时,还是会优先执行子类的方法,如果子类没有,才会执行父类的。  
 
4.4自动转型在生活中的应用:比如说 小王是教师,他拥有所有教师的特征,但他又是优秀教师,他还拥有优秀教师的特征,我可以说小王是优秀教师。  
 
5、多态  
 
多态是由方法重载,继承,方法重写,自动转型等技术的组合。  
转自:http://www.iteye.com/blog/1900297

相关问答

更多
  • 一个通用的例子是: 已经有一个类,叫做鸟 其有飞的方法/函数 然后你另外实现了一个 麻雀的 类 如果没有类的继承 那么你就要: 先去实现 飞的方法 然后再单独实现 麻雀 所具体的其他方法(和属性) 而此类似于 飞 的这个方法,很明显,是各种鸟都具有的,通用的方法 所以,为了避免,每一个其他的,某个鸟,都去分别实现一遍这样的方法 所以,弄了个基类,即基本的类,主要的类 其实现一些大家所共有的,通用的东西 包括很多方法 很多属性 然后其他子类 集成了此基类后 就不用再啰嗦地,重复地,去重新实现一遍那些基本的方法 ...
  • 你必须在Equilateral的__init__方法中显式调用父类Triangle的__init__方法。
  • # -*- coding:utf-8 -*- class FooParent(object): def __init__(self): self.parent = "I \'m the parent." print "Parent" def bar(self, message): print message, "from Parent" class Foochild(FooParent): def __init__(self): FooParent.__init__(self) print "Child" ...
  • 不可能的,就算再发布10个大版本也不能将Java这个从诞生就设置好的规定颠覆,接口完美解决多继承,而且更代码更简洁优美
  • kotlin入门-类和继承 创建类的实例 要创建一个类的实例,我们就像普通函数一样调用构造函数: val invoice = Invoice() val customer = Customer("Joe Smith") 注意 Kotlin 并没有 new 关键字。 继承 在 Kotlin 中所有类都有一个共同的超类 Any,这对于没有超类型声明的类是默认超类 class Example // 从 Any 隐式继承 Any 不是 java.lang.Object;尤其是,它除了 equals()、hashCo ...
  • 我会说你用函数填充了类定义。 看起来应该更像这样: class Test(object): def __init__(self): self.a = 20 self.b = 30 if __name__ == '__main__': test_instance = Test() 和 from class1 import Test class Test2(Test): def e(self): print self.a ...
  • 如果你这样做: if (itemInfo instanceof ItemInfo) { System.out.println("OK!"); } 你当然会看到"OK!" 因为FolderInfo是ItemInfo的子类 - 所以FolderInfo也是一个ItemInfo对象。 继承意味着从子类到超类有一个“是”的关系 - 参见Liskov替代原则 。 If you do this: if (itemInfo instanceof ItemInfo) { System.out.printl ...
  • 不可能像在C ++中那样从COM类继承。 但有一些解决方法: COM聚合 转发 COM聚合仅在您要将接口(带有实现)添加到现有COM类时才有用。 您无法拦截对聚合对象的调用。 转发意味着如果你有一个接口IExistingInterface ,你实现自己的实现IExistingInterface的类。 在您的类中,您保留对要“继承”的对象实例的引用。 在IExistingInterface的实现中,您可以根据需要将调用转发给“inherited”对象。 此方法可让您完全控制。 示例:(伪代码!) class ...
  • super (没有参数列表)使用传入的相同参数调用超类中的相同方法。如果要显式传递任何参数,则必须使用空参数列表: super() 。 请记住: super不是方法调用,它是关键字,关键字不必遵循常规方法调用评估规则。 这是其中一个差异。 对于方法调用, foo和foo()是等价的,它们都不传递任何参数。 对于super ,有一个区别: super()传递任何参数, super 转发参数。 现在,这是一个额外的转折:实际上,你没有传递任何参数来initialize ,所以他们如何传递...或者你呢? 好吧, ...
  • 因为类定义是可执行语句 。 在类的主体内(但在函数定义之外)的任何代码将在运行时执行。 如果您想要只在类对象实例化时才运行的代码,请将其放入__init__类方法中。 请注意, 有些教程会导致错误,这无疑会增加混淆: 定义一个类时不会运行代码 - 只是简单地创建函数和变量。 这是完全错误的。 Because a class definition is an executable statement. Any code within the body of the class (but outside of ...