day03-面对对象2

多态再谈

java创建对象的四种方法
1. 使用new关键字)(构造方法构造)
2. 使用反射  Class.forName.newInstance()(构造方法构造)
3. 使用clone()方法,对象.clone() ,生成对象和原对象并不是同一个。(非构造方法构造)
4. 反序列化(非构造方法构造)
java四大特性

在这里插入图片描述

* 抽象:抽象是将一类对象的共同特 征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
* 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类) ;得到继承信息的类被称为子类(派生类].继承让变化中的软件系统有了一定的延续性 ,同时继承也是封装程序中可变因素的重要手段。
* 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描给成一系列完全自治封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏- -切可隐藏的东西,只向外界提供最简单的编程接口。
* 多态性是指允许不同子类型的对象对同一消息作出不同的响应。
访问修饰符权限

在这里插入图片描述

final与static

在这里插入图片描述
final好处:

final关键字提高了性能。JVM 和Java应用都会缓存final 变量。
final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
使用final关键字, JVM会对方法、变量及类进行优化。

static方法是否可以覆盖?

static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static 方法跟类的任何实例都不相关,所以概念上不适用。

多态
* 方法重载:实现的是编译时的多态性(也称前绑定)
* 方法重写:实现的是运行时的多态(也称后绑定),运行时的多态是面向对象最为精髓的东西
* 实现多态要做两件事:1.方法重写2.对象造型(父类型引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)
* 项目中的多态:举一个简单的例子,在物流信息管理系统中,有两种用户:订购客户和卖房客户,两个客户都可以登录系统,他们有相同的方法Login,但登陆之后他们会进入到不同的页面,也就是在登录的时候会有不同的操作,两种客户都继承父类的Login方法,但对于不同的对象,拥有不同的操作。
继承的优缺点
好处: 
1. 子类能自动继承父类的接口
2. 创建子类的对象时,无须创建父类的对象
坏处:
1. 破坏封装,子类与父类之间紧密耦合,子类依赖于父类的实现,子类缺乏独立性
2. 支持扩展,但是往往以增加系统结构的复杂度为代价
3. 不支持动态继承。在运行时,子类无法选择不同的父类
4. 子类不能改变父类的接口
Java 中是否可以覆盖(override)一个 private 或者是 static 的方法?
Java 中 static 方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而 static 方法是编译时静态绑定的。static 方法跟类的任何实例都不相关,所以概念上不适用。
java 中也不可以覆盖 private 的方法,因为 private 修饰的变量和方法只能在当前类中使用,如果是其他的类继承当前类是不能访问到 private 变量或方法的,当然也不能覆盖

内部类

内部的访问特点:
A:内部类可以直接访问外部类的成员,包括私有。
B:外部类要访问内部类的成员,必须创建对象。
内部类位置
成员位置:在成员位置定义的类,被称为成员内部类。	
局部位置:在局部位置定义的类,被称为局部内部类。
局部内部类访问局部变量的注意事项?
局部内部类访问局部变量必须用final修饰。因为局部变量是随着方法的调用而调用,随着调用完毕而消失。而堆内存的内容并不会立即消失。所以,我们加final修饰。加入final修饰后,这个变量就成了常量。既然是常量。
匿名内部类
就是内部类的简化写法。前提是存在一个类或者接口,这里的类可以是具体类也可以是抽象类。本质是什么呢?是一个继承了该类或者实现了该接口的子类匿名对象。
按照要求,补齐代码要求在控制台输出”HelloWorld”
interface Inter { 
	void show(); 
}
class Outer { 
	//补齐代码	
}
class OuterDemo {
	public static void main(String[] args) {
		  Outer.method().show();
	  }
}
/*
1:Outer.method()可以看出method()应该是Outer中的一个静态方法。
2:Outer.method().show()可以看出method()方法的返回值是一个对象。又由于接口Inter中有一个show()方法,所以我认为method()方法的返回值类型是一个接口。
*/
//答案:
class Outer { 
	//补齐代码
	public static Inter method() {
		//子类对象 -- 子类匿名对象
		return new Inter() {//在此处重写接口
			public void show() {
				System.out.println("HelloWorld");
			}
		};
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章