1. 封装

方法:将属性值修饰为私有,提供get和set方法。造成所有对对象的访问都是通过方法的调用来完成(配合this的使用)
结果:用户不能直接随意改变一个对象内的属性,必须通过调用方法(验证)来访问和修改

2. 面向对象三大特性:继承

    关键字 extents 
	修饰符|使用范围	|继承与否
                    ---|--:|---
	Public|	公开使用	|可以继承|
	Protected|在本类、同包其它类和子类、其它包的子类|可以继承
	(default)|在本类、同包其它类|包的子类中可以								承
	Private|在本类内部使用|不能被继承(实际被继承,无权访问)		
注意:构造方法不
能被继承
继承的对象创建过程:
    C extends B 
    B extends A
    创建C 对象: //不考虑静态代码块,若有静态代码块,先通过递归的由基类到派生类加载代码块分配空间
    初始化A的属性
    调用A的构造方法
    初始化B的属性
    调用B的构造方法(默认调用A的构造,super())
        初始化C的属性
        调用C的构造方法(默认调用B的构造,super()) 	   
    方法覆盖:
    定义:子类用自己的方法实现替换掉能继承自父类的方法实现
    要求:方法名相同、参数表相同、返回值类型相同、(访问修饰符相同或范围更广)
    this关键字的使用
        - 本身是引用,代表当前对象。在类中访问自己的属性和方法时,如果不加this,则自动默认this调用,当在局部方法内出现与类属性同名的局部变量时,如            加this表示类的成员变量,不加则代表是局部变量。
        - 调用本类的无参构造方法
        - this(…),调用本类中其他相应参数表的构造方法
       注意:在使用this时,必须将this关键字放在构造方法内的第一行

    Super关键字:
    是个引用,指向父类的对象,用例调用父类的方法,super.父类方法( ),super须在方法内使用
    可以用在构造方法内,指明调用父类的构造方法,用法和this相同。但必须放在构造函数的第一行,

例子:

class A {
	public A(int i){}
}
class B extends A{
}	

程序出错,系统默认为
class A {
	public A(int i){}
}
class B extends A{
	public B(){
		super();
	}
}

3. 面向对象三大特性:多态

    没有继承就没有多态
Java实行的单继承
多态的开闭原则:(继承和多态)对修改关闭,对扩展开放
利用多态,可以使代码针对父亲展开编程,使代码更通用
多态的两种常见的应用场景:
	把多态应用在方法的参数上:
        m (A a) :方法可以接受A类,也可以接受A的子类对象

    把多态应用在方法的返回值类型上:
        A m() :方法返回的可以是A类或A类的某个子类对象

例子:父类对象引用子类对象,以方便扩展新的子类而不需改变方法代码:
例子1:
public class test {
	public static void main(String[] args) {	
		Animal dog = new Dog();
		Animal cat = new Cat();
		eats(dog);
		eats(cat);
	}
	static void eats(Animal animal){
		animal.eat();
	}
}
class Animal {
	public void eat(){
		System.out.println("吃的方法");
	}
}
class Dog extends Animal {
	public void eat(){
		System.out.println("狗吃骨头");
	}
}
class Cat extends Animal{
	public void eat(){
		System.out.println("猫吃小鱼");
	}
}
例子2
public class ExcEmployee{
	public static void main(String[] args){
		Employee[] es = new Employee[4];
		es[0] = new ProductEmployee("Yangdd",31);
		es[1] = new SalesEmployee("Wucj",36);
		es[2] = new ManageEmployee("Xusy",29);
		es[3] = new CeoEmployee("Huxz" , 16);
		for(int i = 0 ; i <es.length ; i++){
			es[i].work();
		}
		double result = 0 ; 
		int count = 0;
		for(int i = 0 ; i < es.length ; i++){
			if (es[i] instanceof ManageEmployee){
				count++;
				result+=es[i].getAge();
			}
		}
		System.out.println(result/count);  //平均年龄
	}
}
class Employee{
	private String name;
	private int age;
	public Employee(){}
	public Employee(String name){this.name = name;}
	public Employee(String name , int age){	this(name);this.age = age;}
	public int getAge(){	return age;}
	public void setAge(int age){this.age=age;}
	public void work(){	}
}
class ProductEmployee extends Employee{
	public ProductEmployee(String name , int age){super(name,age);}
	public void work(){	System.out.println("在车间劳动");}
}
class SalesEmployee extends Employee{
	public SalesEmployee(String name , int age){super(name,age);}	
	public void work(){	System.out.println("出差跑客户");}
}
class ManageEmployee extends Employee{
	public ManageEmployee(String name , int age){super(name,age);}	
	public void work(){	System.out.println("在办公室斗地主");}
}
class CeoEmployee extends ManageEmployee{
	public CeoEmployee(String name , int age){	super(name,age);}	
	public void work(){	System.out.println("在会议室开会");}	
}

版权声明:本文为linanana原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/linanana/p/12075295.html