本站已关停,现有内容仅作科研等非赢利用途使用。特此声明。
查看: 773|回复: 0
打印 上一主题 下一主题

Android菜鸟饭团#Java中文学习#第十七课 活动笔记

[复制链接]
跳转到指定楼层
1#
发表于 2015-5-8 12:27:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ludengke 于 2015-5-8 21:27 编辑

Android菜鸟饭团#Java中文学习#第十七课 活动笔记

1. 动态绑定(迟绑定)和多态
   在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为这个抽象类的所有派生类。
条件:
1. 要有继承。即:在多态中必须存在有继承关系的子类和父类。
2. 要有重写。即:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
3. 父类引用指向子类对象。(向上转型)即:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法
实际当中new的是谁就调用的就是谁中的方法,new出的子类若重写了父类的方法,调用的就是子类中重写的方法而不是父类中的方法(在一个方法的参数中定义父类的引用,实际传递的时候却是子类的对象)
意义:具有可扩展性,添加子类对象时无需改动父类对象的引用
补充:
下面这种使用方式也是继承所带来的:
Triangel tri 子类是一个语法层面上的词,只要满足继承的语法,就存在子类关系。子类型比子类有更严格的要求,它不仅要求有继承的语法,同时要求如果存在子类对父类方法的改写,那么改写的内容必须符合父类原本的语义,其被调用后的作用应该和父类实现的效果方向一致。而且,只有保证子类都是子类型,多态才有意义。
例子:
= new Triangle();
println("Triangle is a type of sharp? " + tri.isSharp());
而这种方式则是多态:
Sharp sharp = new Rectangle();
println("My sharp has " + sharp.getSides() + " sides.");
2. 抽象类
a) 用abstract关键字修饰一个类,这个类叫做抽象类。用abstract来修饰一个方法,该方法叫做抽象方法。
b) 含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。
c) 抽象类无法new出新对象,即抽象类不能被实例化。(通常把用类创建对象的过程称为实例化)
d) 抽象方法只需声明,不需要实现。
注意:
只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法
子类中的抽象方法不能与父类的抽象方法同名
抽象类(abstract class)的定义方式如下:
public abstract class AbstractClass             //里面至少有一个抽象方法
{
   public int t;  //普通数据成员
   public abstract void method1();   //抽象方法,抽象类的子类在类中必须实现抽象类中的抽象方法
   public abstract void method2();
   public void method3();   //非抽象方法
   public int method4();
   publi int method4 (){
        …… //抽象类中可以赋予非抽象方法方法的默认行为,即方法的具体实现
   }
                       public void method3(){
                        …… //抽象类中可以赋予非抽象方法方法的默认行为,即方法的具体实现
                   }
}
3. Final
a) Final的变量的值不能够被改变。(成员变量和局部变量即形参)
传递参数若为final类型,参数不能在方法中被改变
b) Final的方法不能够被重写。
c) Fina的类不能够被继承。
d) final成员变量必须在声明的时候初始化
注意:
abstract不能与final并列修饰同一个类
abstract 不能与private、static、final或native并列修饰同一个方法
4. 接口
接口(interface)从本质上说是一种特殊的抽象类,只包含常量和方法的定义,没有实现。
格式:public interface Person{
public static final int id=1 ; //static的变量不属于此类,从而避免了多继承中                                                          相同成员变量冲突的问题
public void xiaoming();
}
a) 多个无关的类可以实现同一个接口。
b) 一个类可以实现多个无关的接口。
c) 与继承关系类似,接口与实现类之间存在多态性。
d)
接口的特性:
1. java只支持单继承,接口可以多继承,从而实现java中需要多继承的情况
2. 接口中声明的属性默认为public static final 的;只能是这类型
3. 接口中只能定义抽象方法,而且这些方法默认为public的、也只能是这种类型。
4. 接口可以继承其他的接口(接口间的继承使用implements关键字),并添加新的属性和抽象方法
5. 在实现多接口的时候一定要避免方法名的重复
5:抽象类与接口的区别:
1):抽象类方式中,抽象类可以拥有任意范围的成员数据,同时也可以拥有自己的非抽象方法,但是接口方式中,它仅能够有静态、不能修改的成员数据(但是我们一般是不会在接口中使用成员数据),同时它所有的方法都必须是抽象的。在某种程度上来说,接口是抽象类的特殊化。对子类而言,它只能继承一个抽象类(这是java为了数据安全而考虑的),但是却可以实现多个接口。
2):抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
3):抽象类所跨域的是具有相似特点的类,而接口却可以跨域不同的类。抽象类是从子类中发现公共部分,然后泛化成抽象类,子类继承该父类即可,但是接口不同。实现它的子类可以不存在任何关系,共同之处。
4):对于抽象类而言,它是自下而上来设计的,我们要先知道子类才能抽象出父类,而接口则不同,它根本就不需要知道子类的存在,只需要定义一个规则即可,至于什么子类、什么时候怎么实现它一概不知
每一个技术小白都有一个成为大神的梦想,现在Android菜鸟饭团就给你这个成就梦想的机会。我们提供最新的Android技术教学,只要你又耐心和毅力就一定会在这里有所收获。
Android菜鸟饭团南阳GDG组织发起,秉承着开放、分享、创新的原则,希望通过GDG社区的力量能够给更多的想要学习Android开发技术的小白们创造一个学习,交流,分享的环境。同往常的GDG活动一样,我们依然是任性的一个子都不要,并且还在周六的分享中提供盒饭和不定期的惊喜小礼物呦~所以快来加入我们吧,为你的大神梦想迈出第一步。
把你的个人信息和申请理由快快发送到android@chuang1.net,前来加入我们吧
ChinaGDG.com
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表