面向对象第四天
2015-07-25 18:05
274 查看
第九天笔记
1:复习
1.1:继承
java中是单继承,可以多层继承。
子类可以继承父类的所有的属性和方法,如果想访问父类的属性和方法,可以用super.
this和super的区别
static的用法
final的用法。
方法重写和方法重载的区别
2:抽象类:abstract
2.1:抽象方法:只能方法声明没有方法体的方法。
面向对象分析的过程中,分析到顶层的类时,会发现父类不知道子类是如何实现某一些具体的行为,但是父类肯定子类有这些行为,那么如果父类不清楚这个行为是如何实现的,这个时候这个行为就不应该写方法体,那么没有方法体的方法就叫抽象方法。如果一个类中出现了抽象方法,那么这个类就必须声明为抽象类。
抽象类不一定会有抽象方法,但是抽象方法一定在出现在抽象类中。
2.2:抽象类是不能实例化的。但是抽象类也有构造方法。
如果父类是抽象类,那么子类要么重写父类的所有抽象方法,要么自己为抽象类。
2.3:this.super,static,final,abstract
this和super在调用构造方法的时候不能相遇
static和final常一起使用来修饰常量。
final和abstract不能相遇。因为它们是相反的,final 一定不能让你改,而abstract一定要你修改。
3:接口:interface
3.1:当一个类中的所有方法都是抽象方法的时候,这样的类可以定义为接口。
3.2:类与接口是实现关系 implements
实现接口的类要么为抽象类,要么实现这个接口中的所有的抽象方法。
在java,类可以多实现,可以实现多个接口。
接口与接口是继承关系。java中,类与类是单继承,接口与接口是多继承,类与接口是多实现。类在继承的时候可以同时再去实现接口。
3.3:接口中的方法默认都是公共的抽象方法,方法前面的public abstract也是默认添加上,可写不可写。一般的情况下,为了提供可读性,最好是加上。接口中的成员变量是公共的静态常量,不能够修改值。public static final是默认添加上的。
接口中一般都会有公共的常量和抽象方法。
3.4:一些作用
1提供了程序的扩展性。
2接口中定义的是规则。
3接口降低了程序的耦合度。
4:多态
4.1:多态:多种形态。
4.2:多态的代码体现:父类的引用指向子类的对象。
4.3:发生多态后的影响
Animal animal = new Dog();//向上转型
那么animal对象只能访问Animal类中有的成员,不能访问Animal类中没有的成员。如果需要访问Dog类中的成员,必须进行强制类型转换:很多时候也叫向下转型。
如果不进行判断就进行强制类型转换,这个时候会出现运行时的错误:ClassCastException异常(类型转换异常)
判断对象是哪种类型
对象名 instanceOf 类名:如果对象是后面的类创建出来的,则返回true,否则返回false.
4.4:多态的好处。
在前期设计时,并不知道这个类会出现哪些子类,但是它知道不管多少子类,他们都会有确定的行为,那么设计的时候就可以写父类,后面不管出现多少子类对象,它都是父类的一种。这样代码就可以不用去修改,提高了代码的可维护性和可扩展性。
4.5:多态的前提:必须要有继承或者实现的关系。
4.6:多态的弊端:发生多态后,只能调用父类有的方法,不能调用自己的方法,如果需要调用自己的方法,需要强制类型转换(向下转型).
4.7:多态的细节。
发生多态后
编译的时候 运行的时候
调用普通方法 看左边 看右边
访问普通成员变量 看左边 看左边
访问静态成员变量 看左边 看左边
访问静态方法 看左边 看左边
发生多态后,编译的时候看左边,运行的时候,普通方法看右边的,其他的
都看左边。
阅读以下代码,输出哪些内容?
View Code
1:复习
1.1:继承
java中是单继承,可以多层继承。
子类可以继承父类的所有的属性和方法,如果想访问父类的属性和方法,可以用super.
this和super的区别
static的用法
final的用法。
方法重写和方法重载的区别
2:抽象类:abstract
2.1:抽象方法:只能方法声明没有方法体的方法。
面向对象分析的过程中,分析到顶层的类时,会发现父类不知道子类是如何实现某一些具体的行为,但是父类肯定子类有这些行为,那么如果父类不清楚这个行为是如何实现的,这个时候这个行为就不应该写方法体,那么没有方法体的方法就叫抽象方法。如果一个类中出现了抽象方法,那么这个类就必须声明为抽象类。
抽象类不一定会有抽象方法,但是抽象方法一定在出现在抽象类中。
2.2:抽象类是不能实例化的。但是抽象类也有构造方法。
如果父类是抽象类,那么子类要么重写父类的所有抽象方法,要么自己为抽象类。
2.3:this.super,static,final,abstract
this和super在调用构造方法的时候不能相遇
static和final常一起使用来修饰常量。
final和abstract不能相遇。因为它们是相反的,final 一定不能让你改,而abstract一定要你修改。
3:接口:interface
3.1:当一个类中的所有方法都是抽象方法的时候,这样的类可以定义为接口。
3.2:类与接口是实现关系 implements
实现接口的类要么为抽象类,要么实现这个接口中的所有的抽象方法。
在java,类可以多实现,可以实现多个接口。
接口与接口是继承关系。java中,类与类是单继承,接口与接口是多继承,类与接口是多实现。类在继承的时候可以同时再去实现接口。
3.3:接口中的方法默认都是公共的抽象方法,方法前面的public abstract也是默认添加上,可写不可写。一般的情况下,为了提供可读性,最好是加上。接口中的成员变量是公共的静态常量,不能够修改值。public static final是默认添加上的。
接口中一般都会有公共的常量和抽象方法。
3.4:一些作用
1提供了程序的扩展性。
2接口中定义的是规则。
3接口降低了程序的耦合度。
4:多态
4.1:多态:多种形态。
4.2:多态的代码体现:父类的引用指向子类的对象。
4.3:发生多态后的影响
Animal animal = new Dog();//向上转型
那么animal对象只能访问Animal类中有的成员,不能访问Animal类中没有的成员。如果需要访问Dog类中的成员,必须进行强制类型转换:很多时候也叫向下转型。
如果不进行判断就进行强制类型转换,这个时候会出现运行时的错误:ClassCastException异常(类型转换异常)
判断对象是哪种类型
对象名 instanceOf 类名:如果对象是后面的类创建出来的,则返回true,否则返回false.
4.4:多态的好处。
在前期设计时,并不知道这个类会出现哪些子类,但是它知道不管多少子类,他们都会有确定的行为,那么设计的时候就可以写父类,后面不管出现多少子类对象,它都是父类的一种。这样代码就可以不用去修改,提高了代码的可维护性和可扩展性。
4.5:多态的前提:必须要有继承或者实现的关系。
4.6:多态的弊端:发生多态后,只能调用父类有的方法,不能调用自己的方法,如果需要调用自己的方法,需要强制类型转换(向下转型).
4.7:多态的细节。
发生多态后
编译的时候 运行的时候
调用普通方法 看左边 看右边
访问普通成员变量 看左边 看左边
访问静态成员变量 看左边 看左边
访问静态方法 看左边 看左边
发生多态后,编译的时候看左边,运行的时候,普通方法看右边的,其他的
都看左边。
阅读以下代码,输出哪些内容?
public class Dervied extends Base { private String name = "dervied"; public Dervied() { tellName(); printName(); } public void tellName() { System.out.println("Dervied tell name: " + name); } public void printName() { System.out.println("Dervied print name: " + name); } public static void main(String[] args){ new Dervied(); } } class Base { private String name = "base"; public Base() { tellName(); printName(); } public void tellName() { System.out.println("Base tell name: " + name); } public void printName() { System.out.println("Base print name: " + name); } }
package com.java.interfac; import java.util.Scanner; //车 //需求:描述宝马,奔驰,劳斯莱斯, public class TestCar { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入你想要的车:"); String carName = sc.next(); //CarFactory factory = new CarFactory(); Car2 car = CarFactory.preduceCar(carName); RunUtil.getCar(car); } } //造成工厂类 class CarFactory{ public static Car2 preduceCar(String message){ if("宝马".equals(message)){ return new BaoMa(); }else if("奔驰".equals(message)){ return new Benz(); }else if("劳斯莱斯".equals(message)){ return new Los(); }else { return null; } } } //测试跑的工具类 class RunUtil{ public static void getCar(Car2 car){ System.out.print("我有车,而且我车是:"); if(car instanceof Benz){ System.out.println("奔驰"); }else if(car instanceof BaoMa){ System.out.println("宝马"); }else if(car instanceof Los){ System.out.println("劳斯莱斯"); } else { System.out.println("hehe,什么鬼,我做不出!!"); } car.run(); } } abstract class Car{ //public int seat; public abstract void run(); } interface Car2{ public abstract void run(); } class Benz extends Car implements Car2{ public void run(){ System.out.println("奔驰跑"); } } class BaoMa extends Car implements Car2{ public void run(){ System.out.println("宝马跑"); } } class Los extends Car implements Car2{ public void run(){ System.out.println("Los跑"); } }
View Code
相关文章推荐
- 设置C# Windows 服务与桌面交互
- DIV+CSS中标签dl dt dd常用的用法
- 统计学习笔记——统计学习三要素
- DaoUtil
- 【笔记】Loadrunner添加OS类型为Windows的服务器(Win7)
- 工厂模式
- maven基础学习
- python,list
- JavaWeb 中乱码过滤器的代码
- python 字符处理代码 1.0
- 报错:Request failed: unacceptable content-type: text/html
- POJ 1125 Stockbroker Grapevine
- javascript创建动态表单的方法
- 快速开发BACnet产品之二 (关于BACnetLib类结构的说明)
- ZOJ_1204_Additive equations
- 容器使用笔记(List篇)
- vim辑编技巧
- Linux 中多个namespace的情况下,查看对应的namespace下面的路由信息
- qt 嵌入 sdl
- js正则表达式的使用详解