面向对象三大特征_封装,继承,多态,final关键字详解答疑

面向对象的三大特征:继承 封装 多态

继承:
- 将多个类重复的内容放到一个新的类中,使用extends关键字让原来的类和新的类产生关联关系–继承,新的类叫做子类,原来的类是父类
- 子类可以继承父类的部分信息(父类的私有化信息,构造方法,构造代码块不能被继承)
- 继承方式:单继承,子类只能有一个父类,父类可以有多个子类
**重写:**重写原则
- 前提:出现在继承中-----方法签名一致
- 当父类方法返回值类型是基本类型/void类型时,那么子类返回值类型要和父类返回值类型保持一致
- 当父类方法返回这类型是引用类型时,那么子类方法返回值和父类方法返回值类型一致,要么是父类方法返回值的子类
-`class A{}

		class B extends A{}
		
		 
		
		class C{
		
		public A m(){return null;}
		
		}
		
		class D extends C{
		
		public A/B m(){return null;}

}

- 子类方法访问权限修饰符要么和父类方法访问权限修饰符范围一致,要么子类访问权限修饰符比父类方法访问权限修饰符的范围要大 -class A{

					 void m(){}
					
					}
					
					class B extends A{
					
					public void m(){}
					
					}

`访问权限修饰符:
在这里插入图片描述

多态:
java分为编译时期、运行时期
编译时多态–在编译时期绑定代码–重载 编译的时候保证重载不报错就好
public void m(){}
public void m(int m){}
运行时多态—在运行时期绑定代码—重写 在运行的时候才知道调用的是哪个方法 向上造型(重写)

**向上造型:**
		可以调用那些方法看父类----父类中的方法一方面被子类重写了,另外一方面子类可以继承父类的部分信息
		方法的具体执行调用看子类---如果子类重写了父类的方法,那么子类优先调用本类的方法,否则向上查找,一直向上查找,父类的父类也可以,如果没有找到,则报错停止程序。

多态优点:
  1. 统一参数类型
  2. 降低耦合度(高内聚,低耦合)
  3. 体现的是子类的不同展示,实现不同,相当于方法的增强

封装:
体现形式–方法,属性私有化并且提供公共的访问方式进行正常取值,正常赋值,提高代码数据安全性

publicstaticvoidmain(String[]args){

//创建代表人的类的对象

Personp=newPerson();

//给对象属性赋值

//p.name="豆豆";

//调用方法间接给私有化属性进行赋值

p.setAge(-10);

//p.gender='男';

//调用方法间接给私有化属性进行取值

//System.out.println(p.name+","+p.getAge()+","+p.gender);

}

}

//代表人的类

classPerson{

//属性

privateStringname;

//私有化属性,只能在本类中直接使用

privateintage;

privatechargender;

 

 

//Alt+Insert---Generate---GetterandSetter

//java自动提供

publicStringgetName(){

returnname;

}

 

publicvoidsetName(Stringname){

this.name=name;

}

 

publicintgetAge(){

returnage;

}

 

publicvoidsetAge(intage){

this.age=age;

}

 

publicchargetGender(){

returngender;

}

 

publicvoidsetGender(chargender){

this.gender=gender;

}

 

 

 

 

 

/*//定义方法间接的给私有化属性进行赋值

publicvoidsetAge(intage){

if(age<0){

System.out.println("数据有误!!!");

}else{

this.age=age;

}

}

 

//定义方法间接的给私有化属性进行取值

publicintgetAge(){

returnage;

}*/

 

 

/*//有参构造

publicPerson(intage){

if(age<0){

System.out.println("数据有误!!!");

}else{

this.age=age;

}

}*/

}

在class字节码文件中的封装:完全的对于类的封装,将类进行模块化封装,所有的成员变量封装到Fields域中,将所有的方法封装到Mehtod域中,将所有的构造方法封装到Constructor域中,在JVM中提供一个Class对象作为class对象的访问域的接口,从而将类进行模块化存在,实现反射的基础
对象中的封装,是将属性进行私有化,提供setXX() getXX()方法在外部进行属性私有化的赋值和取值访问,不会造成数据的泄露

**Final关键字:**关键字,修饰符—>数据、方法、类
作用:保证java中某些资源是不能被改变的
最终值:

	1. 当final修饰基本类型数据时,值不能改变
	2. 当final修饰引用类型数据时,地址值不能改变
	3. 当final修饰成员变量,保证对象创建完成之前确定值----构造代码块   构造方法,静态代码块
	4. 当final修饰静态变量时(静态常量),保证类加载完成之前给值----静态代码块(只能)
				class SmallPerson extends SuperMan{
				    final static int i;
				    static{
				        i=0;
				    }
				    public SmallPerson(){
				        //i=1;
				        //super();
				    }
				}
**```
		修饰方法:**   

 1. 支持重载   ---重载的方法不是同一个方法,所以支持重载
 2. 不支持重写  ----重写的方法,子类要进行改写,而本身创建的初衷就是不能改变,只能是最终的方法

	

```html
						publicclassFinalDemo3{
						
						 
						
						}
						
						 
						
						 
						
						classFDemo1{
						
						publicfinalvoidn(){}
						
						//支持重载
						
						publicfinalvoidn(inti){}
						
						}
						
						classFDemo2extendsFDemo1{
						
						//@Override
						
						//不支持重写
						
						//publicfinalvoidn(){}
						
						}

修饰类:

  1. 可以继承别的类 ----- 继承的类是别得
  2. 不能被别的类继承 ----final表示的就是不希望外界打扰所以不能被别的类进行扩展,表示的是不可改变

**修饰参数:**----方法中修饰参数的表示的是变量的值只能被赋值,不能对这个值进行修改 i 和value都不能进行修改 public void finalFunc(final int i, final Value value) { // i = 5; 不能改变i的值 // v = new Value(); 不能改变v的值 value.v = 5; // 可以改变引用对象的值 }

在这里插入图片描述


版权声明:本文为qq_43349161原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。