Java大数据之路--面向对象特征(封装、继承、访问权限修饰符、多态)

  • 封装

  • 概念

体现:方法、类中属性私有化(private),通过公共的访问方式(get、set方法)就能正常的赋值和取值,提高代码的数据安全性。

public class FZDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建Person类对象
		
		Person p = new Person();
		p.setAge(10);
		//给对象属性赋值
	
		
	}

}

class Person {
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public char getGender() {
		return gender;
	}
	public void setGender(char gender) {
		this.gender = gender;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	private String name;
	private char gender;
	private int age;
	

}

 

  • 继承 

  • 概念

多个类中的内容相同,把相同的内容放到一个新类中,让原来的类和这个新类通过extends产生了关联关系-----继承

原来的类叫做:子类、派生类

新的类叫做:父类、超类

子类可以继承父类部分信息。(解释:父类中私有信息、构造方法以及构造代码块,子类都拿不到,不能通过子类对象.出来,被protected修饰的信息,如果想要被访问到需要子类对象在子类对象的本类中使用。

public class ExtendDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建医生对象
		Docter d = new Docter();
		d.name="zz";
		
		d.treat();
	}

}
//发现 类Doctor和类Nurse重复
//extends让医生护士类和YiLiao类产生了关联关系--继承
//YiLiao称之为父类、也叫超类、也叫基类
//医生护士类叫做子类、派生类
class YiLiao{
	 String name;
	 private char gender; //私有无法继承
	 int age;
	String dept;
	public void treat() {
		System.out.println(name+"治病救人");
}
}
class Docter extends YiLiao{
//当出现了和父类中方法签名一样的方法
//输出的是子类的方法,叫做方法的重写
	public void treat() {
		System.out.println(name+"拿着手术刀治病救人");
	}
	}

class Nurse extends YiLiao{
//	private String name;
//	private char gender;
//	private int age;
//	String dept;
//	public void treat() {
//		System.out.println(name+"治病救人");
	}
console:
zz拿着手术刀治病救人

 

  • 继承的方式

  1. 单继承(java支持):一个子类只能有一个父类,父类可以有多个子类,JAVA类与类之间只支持单继承

  2. 多继承(c语言支持):

//C语言的多继承
class A{
m();
}
class B{
n();
}
//m()和n()都能拿到,极大的提高代码的复用性
class C extend A,B{}

//java单继承(类与类)
class A{
int m(){};
}
class B{
boolean m(){};
}

class C extends A,B{} 
C c = new C();
//当两个父类中方法名一样 会导致方法的混用问题,为了避免这个问题出现java使用的是单继承
result = c.m();

//类与类之间是多继承好,还是单继承好,要看具体的场景,各有千秋
  • 方法的重写(覆盖)

在父子类中出现了方法签名一致的方法,我们称之为方法的重写。

需要遵循方法重写的原则(两等两小一大):

 1.父子类方法签名相等。

 2.如果父类的方法返回值类型是基本类型/void,子类的方法返回值类型要和父类保持一致。

 3.如果父类的方法返回值类型是引用类型,子类的方法返回值类型要么和父类的方法返回值类型保持一致,要么就是父类方法返回值的子类:

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

 4.子类的方法访问权限修饰符要么和父类的访问权限修饰符一直,要么大于父类的访问权限修饰符范围。

class A{
    void m(){}
}
class B extends A{
    //子类修饰符比父类大
    public void m(){}
}

5.子类抛出的异常不管几个只要不超出父类异常的范围就能重写(编译时异常),运行时异常不影响。

class ED1{
    //重载和异常无关系,方法重载
    public void m()throws IOException {}
    public void m(int i){}
}
class ED2 extends ED1{
    @Override//可以重写
    public void m()throws IOException{}
}

 


 

  •  访问权限修饰符(控制对象访问类中属性方法)

访问权限修饰符
 本类子类同包类其他类
public可以可以可以可以

protected

可以可以可以不可以
默认(不写)可以

同包子类

可以

可以不可以
private可以不可以不可以不可以
  • super关键字

  • 概念

super关键字用于子类中调用父类信息(代表父类对象),所有子类的构造方法都要默认调用父类的无参构造。如果父类没有提供无参构造,子类所有的构造方法需要通过super语句去调用对应形势的父类构造。

super语句用于在子类构造方法中调用父类的构造方法,保证super语句在代码的第一行。

父类对象优先于子类对象先出现(执行顺序:  父类的构造代码块--->父类的构造方法--->子类的构造代码块--->子类的构造方法)。构造代码块和构造方法与对象同级。

super(); 是父类的构造方法。

public class ExtendsDemo3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		pig p = new pig();
		p.eat();
	}
}
// 代表动物类
class Animal {
	public  Animal(String name) {}
	// 方法
	public void eat() {
		System.out.println("在无忧无虑地吃饭.....");
	}
	public void sleep() {
		System.out.println("在无忧无虑地的睡觉.....");
	}
}

// 代表猪类
class pig extends Animal {
	
	//无参构造
	//子类的所有的构造方法默认调用父类的无参构造,先创建了父类对象,再有的子类对象
	public pig(){
		//super语句在子类的构造方法中调用父类的构造方法
		//super和this相同要在第一行使用
		//super语句和this语句不能同时出现
		super("abc");
	
		
		
	}
	// 对eat方法进行重写
	public void eat() {
		System.out.println("在哼哧哼哧地吃....");
		System.out.println("吃饱了...想睡觉...");
		// 在JAVA中所有的非静态方法以及属性都可以通过对象调用
		// sleep方法是一个非静态方法可以通过对象调用
		// this ---代表当前类的对象
		// 提供一个父类对象
		// this.sleep();//底层还是通过super来调用
		super.sleep();
	}
}

 

  • 多态

  • 概念

代码在操作过程中体现的多种形式

java时期-----编译时期(检测语法)、运行时期(检测逻辑)

1.编译时多态----在编译时期进行代码绑定(重载)

//方法的重载就是多态的一种体现形式
public static void m(){}
public static void m(int i){}

            2.运行时多态(前提是继承)----在运行时期进行代码的绑定(重写)

                                                          -----向上造型

 

向上造型:声明类是父类,子类是实际创建类,创建对象:(父类----目录  子类-----正文)

  • 多态的优点

统一参数类型、统一方法功能调用(子类重写方法)、解耦(降低耦合度(多个模块之间的联系) 高内聚,低耦合)

  • 案例练习

     图形类(Shape   长和宽都是private  有参构造(用于赋值) 周长和面积方法)

     矩形类(Rectangle 子类 通过有参构造赋值 计算周长和面积)

     正方形类(Square 矩形类的子类(多级继承) 有参构造赋值 计算周长和面积)

     圆形类(Circle 图形类的子类 有参构造赋值 计算周长和面积)

     创建向上造型的对象 求出每个图形的周长和面积。

  • 面向对象编程

对象的抽象化是类,类的具体化是对象,面向对象团建开发需要经过OOA(面向对象分析)、OOD(面向对象设计)和OOP(面向对象编程)三个阶段,OOA对目标系统进行分析,及案例分析模型,并将之文档化;OOD用面向对象的思想对OOA的结果进行细化,得出设计模型。OOA和OOD的分析、设计结果需要统一的符号来描述、交流并记录,UML就是这种用途,记录OOA和OOD结果的符号表示法。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值