java面向对象核心技术超全超详细介绍

类的封装

面向对象编程的核心思想,将对象的属性和行为封装起来,类就是其载体

类的继承 (子类可直接使用父类方法和属性)

让一个类继承另一个类,使用extends关键字

类1 extends 类2

java中的类只支持单继承,即一个子类只能继承一个父类

方法的重写

1.重写的实现

继承并不只是扩展父类的功能,还可以重写父类的成员方法

可以父类声明,子类实现,执行子类方法中的代码

父类 对象=new 子类();

2.super关键字

(this关键字代表本类对象,super关键字:如果子类重写了父类的方法还想调用父类的方法,可用super关键字)

使用方法:

super.property;    //调用父类的属性
super.method();    //调用父类的方法

如果在子类构造方法中使用类似super()的构造方法,其他代码只能写在super()之后,不能写在前面,否则会报错

object类

在java中,所有的类都直接或间接继承了java.lang.object类,object类是比较特殊的类,它是所有的类的父类,是Java类层中的最高层类。

重要方法:

(1) getClass()方法

返回对象执行时的class实例,然后使用此实例调用getName()方法可以取得类的名称

getClass().getName();

(2)toString()方法

将一个对象返回为字符串形式,它会返回一个String实例

3.equals()方法

此方法默认实现是使用“==”运算符比较两个对象的引用地址,而不是比较对象的内容

类的多态 (一种定义多种实现)

体现在两方面:

​ (1)方法的重载

​ (2)类的上下转型

1.方法的重载

在同一个类中可以同时存在一个以上的同名方法,只要这些方法的参数个数或类型不同即可

(例:构造方法名称由类名决定,可以有多个构造方法同时存在)

2.向上转型 (具体转抽象)总是安全的

把子类对象赋值给父类类型的变量(类似父类声明子类实现)

3.向下转型 (抽象转具体) 具有一定的危险性

显示类型转换:将父类对象强制转换为某个子类对象

父类    a=new   子类();
子类   b=(子类)a;

4.instanceof关键字 (返回值为布尔值)

用来判断一个类是否实现了某个接口,也可以用它来判断一个实例对象是否属于一个类

myobject instanceof ExampleClass; //myobject:某类的对象引用,ExampleClass:某个类

抽象类与接口

在多态机制中,并不需要将父类初始化对象,需要的只是子类对象,所以在java语言中设置抽象类不可以实例化对象,

定义抽象类使用abstract关键字

[权限修饰符]     abstract   class   类名{
类体
}

抽象方法

[权限修饰符] abstract 方法返回值类型 方法名(参数列表);

抽象方法本身没有任何意义,除非它被重写,而承载这个抽象方法的抽象类必须被继承,实际上,抽象类除了被继承外没有任何意义

构造方法不能被定义为抽象方法,继承抽象类的所有子类都需要将抽象类中的抽象方法进行重写

接口 (使用interface关键字)

接口是抽象类的延伸,可以将它看作是纯粹的抽象类,接口中的所有方法都没有方法体

[修饰符]   interface   接口名 ([extends  父类接口名列表]){  //若使用了extends父类接口名为必选参数
语句
}

一个类实现一个接口可使用implements关键字

public class 子类 extends 父类 implements 接口

在接口中定义的任何变量都自动是static和final的,因此,在接口中定义变量时,必须进行初始化,而且实现接口的子类不能对接口中的变量重新赋值,且要重写接口中的方法

多重继承:在java中不允许多重继承,但使用接口就可以实现

class 类名 implements 接口1.接口2,接口3·······

接口继承接口,使用extends关键字
访问控制

声明类时,如果没有使用public修饰符设置类的权限,则这个类默认为default(缺省)修饰

java类包

java.lang.Math java.lang:包的名称,Math:类的名称

类包不仅可以解决类名冲突问题,还可以在开发庞大的应用程序时,帮助开发人员管理庞大的应用程序组件,方便软件复用, 同一个包中的类相互访问时,可以不指定包名,java包的命名规则是全部使用小写字母,另外由于包名能转换为文件的名称,所以包名中不能包含特殊字符

final关键字

1.final类

若果希望一个类不允许任何类继承,并且不允许其他人对这个类进行任何改动,可以将这个类设置成final形式

final class 类名{}

2.final方法(不能被重写)

可防止子类修改该类的定义与实现方式,同时定义final的方法的执行效率要高于非final方法

3.final变量 (不是恒定不变的,将随机数赋予定义为final的常量,每次运行都会改变)

通常由final定义的变量为常量

例:final double PI=3.14;

内部类(在类中再定义一个类) 可节省编译后产生的字节码,内外部类不能同命,内部类可互相调用

1.成员内部类

内部类可以随意使用外部类的成员方法以及成员变量,但内部类成员只有在内部类的范围是可知的,不能被外部调用,内部类对象会依赖于外部类对象,除非已经存在一个外部类对象,否则类中不会出现内部类对象

实例化内部类对象

OuterClass   out=new  OutClass();
OuterClass.innerClass   in=out.new   innerClass();

2.内部类向上转型为接口

(1)可完全隐藏内部类的具体实现过程

(2)可以定义多个内部类,以不同的方式实现接口中的同一个方法(一个接口可以由多个内部类实现)

(3)这种技巧经常被应运在swing编程中,可以在一个类中做出不同的响应事件

3.使用this关键字获取内部类与外部类的引用

若果在外部类中定义的成员变量与内部类的成员变量名称相同,可以使用this关键字

public class TheSameName{
private int x;
	private class Inner{
		private  Int x=9;
		public void doit(int x){
		x++;				//调用的是形参x
		this.x++;			//调用内部类的变量x
		TheSameName.this.x++;    //调用外部类的x变量
		}
	}
}
局部内部类

内部类不仅可以在类中定义,还可在类的局部位置定义,如在类的方法或任意的作用域中均可以定义内部类

作用域太小,不利于多次复用

匿名内部类 (没有名称,使用默认构造方法来生成对象,但其没有构造方法)
return new A(){		//A:类名
···//内部类体
};				//分号:代表创建对象引用表达式的标识
静态内部类 (内部类前加static修饰符)

特点:

​ (1)若果创建静态内部类的对象,不需要创建其外部类的对象;

​ (2)不能从静态内部类的对象中访问非静态外部类的对象

内部类的继承

内部类和其他普通类一样可以被继承,但继承内部类比继承普通类复杂,需要设置专门的语法来实现

public class OutputInnerClass   extends   ClassA.ClassB{   //继承内部类ClassB
	public OutputInnerClass(Class  a){
	a.super();
	}
}
class ClassA{
	class ClassB{
	}
}

在某个类继承内部类时,必须硬性给予这个类一个带参数的构造方法,并且该构造方法的参数必须是该内部类的外部类引用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值