目录
- 1.抽象类、抽象方法
- 2.接口interface
- 3.多态
- 4.对象转型
- 5.内存分析
- 6.设计原则
- 7.单例设计模式
1.抽象类、抽象方法
1.抽象方法和抽象类必须使用abstract修饰符修饰,有抽象方法的类只能被定义成抽象类(即方法修饰词为abstract时,类修饰词也必须为abstract),抽象类里可以没有抽象方法。
抽象方法和抽象类的规则:
1)抽象类和抽象方法必须使用abstract修饰,抽象方法不能有方法体。
2)抽象类不能被实例化。
3)抽象类可以包含成员变量,方法(普通方法和抽象方法都可以),构造器,初始化块,内部类(接口、枚举)。抽象类的构造器不能创建该类实例,主要是为了让子类调用。
4)含有抽象方法的类(定义了一个抽象方法;或继承了一个抽象父类,但没有完全实现父类包含的抽象方法;或实现了一个接口,但没有完全实现接口包含的抽象方法的三种情况)只能被定义为抽象类。
- 面试题:
- 1.可以使用new关键字来创建抽象类对象?不可以,创建的是一个匿名内部类
- 2.抽象类中只能有抽象方法?不一定,可以有非抽象方法
- 3.抽象类中可不可以没有抽象方法?可以没有抽象方法,但是这样是没有意义
- 4.如果父类是抽象类,则子类必须重写父类的抽象方法?不一定,子类如果是抽象类,可以不去重写
- 5.抽象类不能有构造方法?有构造方法
- 6.抽象类不能new对象,拿构造方法有什么用?1.将抽象类里的属性存放在本对象中。 2.初始化数据
- 7.抽象方法必须在抽象类中?必须
2.接口interface
接口:一种特殊的抽象类。
-
接口相关:
*接口里只有静态常量和抽象方法(java8开始可以有具体方法,但是只能是default和static的)
* 接口创建:Interface
* 一个类去实现接口:implements
* Java里:类-类是单继承,类-接口是多实现,接口-接口是多继承
* 接口是不能被创建对象的,创建的是他的匿名内部类
-
接口的应用场景:
* 1.抽象类中,如果只有静态常量或抽象方法时,用接口代替,因为类-类是单继承,类-接口多实现
* 2.常量接口
-
面试题:
- 1.一个类可以实现多个接口?可以
- 2.一个接口可以实现多个接口?不可以
- 3.一个接口可以继承多个接口?可以
- 4.接口里面的方法不一定都是抽象的?必须是抽象方法(java8开始可以有具体方法,但是只能是default和static的)
- 5.接口解决了类的单继承问题? 对的
- 6.一个类是否可以继承一个类并同时实现多个接口?可以
3.多态
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
抽象类的多态:子类对象指向父类引用
Teacher t = new Teacher();
JiaoTongTools tools = new Plane();
t.open(tools);
System.out.println("欣赏沿途的风景...");
t.close(tools);
接口的多态:实现类对象指向接口引用
Computer computer = new Computer();
IUSB usb = new Disk();//面向接口编程
computer.connect(usb);
4.对象转型
1.向上转型:子类转父类
可以获取父类属性和方法
不可以获取子类属性和方法
可以调用子类重写父类的方法
Animal an = new Dog();
2.向下转型(不安全):父类转子类
Animal an = new Dog();
if(an instanceof Dog){
Dog dog = (Dog) an;
}else if(an instanceof Cat){
Cat cat = (Cat) an;
}
注意:下转型时,一定用instanceof判断
ClassCastException:类型转换异常
5.内存分析
6.设计原则
单一职责原则:就是所谓的“高内聚,低耦合”,也就是说每个类应该只有一个职责,对外只提供一种功能,而引起该类变化的原因也应该只有一个。
开闭原则:对扩展开发,对修改关闭,对功能的扩展是通过增加代码来进行的,而非修改原有的类代码。
里氏替换原则:在任何父类出现的地方,都可以用它的子类来替换
依赖注入原则:要依赖抽象,而不是依赖于具体的实现
接口分离原则:不应该强迫子类实现他们不需要使用的方法,一个接口应该只提供一种对外的功能,不要把所有的方法都封装到一个接口中,还是可以从分层的角度来理解。
迪米特原则:一个对象应该对其他对象尽可能少的了解,也就是说要降低对象之间的耦合度,面向接口来编程,不理会其内部的工作原理
7.单例设计模式
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。
具体实现:
(1)将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。
(2)在该类内部产生一个唯一的实例化对象,并且将其封装为private static类型。
(3)定义一个静态方法返回这个唯一对象。
饿汉式单例:
/**
* 单例模式 -- 饿汉式
*
* 优点:线程安全
* 缺点:占内存
*/
public class MyClass {
private static MyClass my = new MyClass();
private MyClass(){}
public static MyClass getInstance() {
return my;
}
public static void eat(){}
}
懒汉式单例:
/**
* 单例模式 -- 懒汉式
*
* 优点:不占内存
* 缺点:线程不安全
*
*/
public class MyClass {
private static MyClass my = null;
private MyClass(){}
public static MyClass getInstance() {
if(my == null){
my = new MyClass();
}
return my;
}
public static void eat(){}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)