当前位置: 首页 > news >正文

南宁做自适应网站最靠谱的十大教育机构

南宁做自适应网站,最靠谱的十大教育机构,高品质网站建设,营业执照年审登录入口前言 http://t.csdnimg.cn/0CAuc 在上一篇我们已经详讲了继承特性,在这我们将进行最后一个也是最重要的特性讲解——多态 在讲解之前我们需要具备对向上转型以及方法重写的初步了解,这有助于我们对多态的认识 1.向上转型 即实际就是创建一个子类对象…

前言

http://t.csdnimg.cn/0CAuc

在上一篇我们已经详讲了继承特性,在这我们将进行最后一个也是最重要的特性讲解——多态


在讲解之前我们需要具备对向上转型以及方法重写的初步了解,这有助于我们对多态的认识

1.向上转型

即实际就是创建一个子类对象,将其当成父类对象来使用

语法格式:父类类型 对象名 = new 子类类型()

 Animal animal1=new Dog();

Animal是父类类型,但可以引用一个子类对象,因为是从小范围向大范围的转换。 

class Animal {public String name;public int age;public Animal(String name, int age) {this.name = name;this.age = age;}public void eat() {System.out.println(this.name +" 正在吃!");}
}
class Dog extends Animal {public Dog(String name, int age) {super(name, age);//alt +回车}public void bark() {System.out.println(this.name + " 旺旺叫!");}@Overridepublic void eat() {System.out.println(this.name +" 正在吃狗粮!");}
}
public class Test3{public static void main(String[] args) {Animal animal1 = new Dog("小黄", 10);animal1.eat();animal1.bark();}
}

在这我们对bark引用会报错,而eat不会,原因是我们只能访问父类特有的 

那为什么对eat的访问结果是"小黄 正在吃狗粮!",这里我们就要提到方法重写

2.方法重写

重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写

重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。

方法的重写:

1.方法名相同 2.方法的参数列表相同(个数、顺序、类型) 3.方法的返回值相同

规则:

1.静态方法不能被重写

2.被private修饰的方法不能被重写

3.被final修饰的方法(密封方法)不能被重写

4.如果方法被重写,那么子类的访问权限要大于等于父类的权限

在上面的代码里对于eat的结果是"小黄 正在吃狗粮!"我们就可以进行解释

 public void eat() {System.out.println(this.name +" 正在吃!");//父类中}public void eat() {System.out.println(this.name +" 正在吃狗粮!");//子类中方法重写}

 1.什么是多态

有人可能会认为一种事物,多种形态,这样的认识是不正确

通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。即同一件事情,发生在不同对象身上,就会产生不同的结果 

2.多态的实现

class Animal {public String name;public int age;public Animal(String name, int age) {this.name = name;this.age = age;}public void eat() {System.out.println(this.name +" 正在吃!");}
}
class Dog extends Animal {public Dog(String name, int age) {super(name, age);//alt +回车}public void bark() {System.out.println(this.name + " 旺旺叫!");}@Overridepublic void eat() {System.out.println(this.name +" 正在吃狗粮!");}
}
class Bird extends Animal {public Bird(String name, int age) {super(name, age);}public void qiqi() {System.out.println(this.name +" 吱吱叫!");}public void fly() {System.out.println(this.name+" 正在飞!");}@Overridepublic void eat() {System.out.println(this.name+" 正在吃鸟粮!");}
}
public class Test3 {public static void main(String[] args) {Animal animal1=new Dog("小黄",10);//向上转型Animal animal2=new Bird("小黑",5);//向上转型animal1.eat();//实际执行就是Dog类中重写的方法animal2.eat();//实际执行就是Bird类中重写的方法}
}

这里输出的结果就是应用了上述两种方法,向上转型方法重写 

注意:向上转型的缺点就是不能调用子类特有的方法

 

3多态的优缺点

优:1.能够降低代码的 "圈复杂度", 避免使用大量的 if - else

什么叫 "圈复杂度" ? 圈复杂度是一种描述一段代码复杂程度的方式. 一段代码如果平铺直叙, 那么就比较简单容易理解. 而如 果有很多的条件分支或者循环语句, 就认为理解起来更复杂. 因此我们可以简单粗暴的计算一段代码中条件语句和循环语句出现的个数, 这个个数就称为 "圈复杂度". 如果一个方法的圈复杂度太高, 就需要考虑重构. 不同公司对于代码的圈复杂度的规范不一样. 一般不会超过10

2. 可扩展能力更强

缺:代码的运行效率降低

1. 属性没有多态性 当父类和子类都有同名属性的时候,通过父类引用,只能引用父类自己的成员属性

2. 构造方法没有多态性

class B {public B() {// do nothingfunc();}public void func() {System.out.println("B.func()");}
}class D extends B {private int num = 1;@Overridepublic void func() {System.out.println("D.func() " + num);}
}public class Test3 {public static void main(String[] args) {D d = new D();}
}
//结果是D.func() 0
//在子类第一条会先进行super();所以先是父类构造方法的调用,然后触发动态绑定调用子类的func(),此时的num还未初始化,即为0

 结论:

"用尽量简单的方式使对象进入可工作状态", 尽量不要在构造器中调用方法(如果这个方法被子类重写, 就会触发动态绑定, 但是此时子类对象还没构造完成), 可能会出现一些隐藏的但是又极难发现的问题

4.向下转型

在讲完向上转型之后,还有一个向下转型

将一个子类对象经过向上转型之后当成父类方法使用,再无法调用子类的方法,但有时候可能需要调用子类特有的方法,此时:将父类引用再还原为子类对象即可

如果我们仅仅像向上转型那样进行写的话会报错

Bird bird1=(Bird)animal2;//这里需要进行强制类型转换,否则会报错

 对此

向下转型用的比较少,而且不安全,万一转换失败,运行时就会抛异常。Java中为了提高向下转型的安全性,引入了instanceof关键字,如果该表达式为true,则可以安全转换。

public class Test3 {public static void main(String[] args) {Animal animal1=new Dog("小黄",10);Animal animal2=new Bird("小黑",5);//向上转型if(animal1 instanceof Bird){Bird bird2=(Bird)animal1;}else{System.out.println("animal1 instanceof Bird not!");}Bird bird1=(Bird)animal2;bird1.fly();}
}


如果上述内容对您有帮助,希望给个三连谢谢

 

http://www.jinmujx.cn/news/109399.html

相关文章:

  • wordpress网站搭建bt搜索引擎
  • app模拟制作班级优化大师
  • 怎么做商业服务网站最新国内新闻事件今天
  • 建立个人网站能赚钱吗优化推广公司哪家好
  • 梅州网站建开发外包网站
  • 网站 二级域名谷歌seo搜索引擎优化
  • 广州网站建设公司有哪些自动友链网
  • 做网站哪里最好网络营销岗位技能
  • 网站推广服务包括哪些中国十大流量网站
  • 学术会议网站怎么做承接网络推广外包业务
  • 站长之家ping提升网页优化排名
  • 浙江公司网站建设推广百度站长工具seo
  • 泰安做网站建设的公司单页网站制作教程
  • 大连网站建设信息国内seo公司哪家最好
  • 视频网站直播如何做最近一周热点新闻
  • 陕西建设局网站seo是啥软件
  • 免费教育网站建设浙江网站建设营销
  • 百度站长平台网站百度云手机app下载
  • 学做预算有网站吗潍坊在线制作网站
  • ftp 修改网站竞价推广思路
  • 大大大大大大大dj知乎关键词优化软件
  • 网站招代理软件开发公司排名
  • 日本做头像的网站当下最流行的营销方式
  • 网站技巧免费长尾词挖掘工具
  • 日历api接口河北seo网络优化培训
  • 做cms网站步骤湛江百度网站快速排名
  • 做健身网站吸引人的软文标题
  • 企业商城网站开发建设软文范例大全800
  • 用vs2010做网站seo搜索引擎优化名词解释
  • 官方网站建设与维护好处如何制作网页广告