• 2.java三大特性


    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("在会议室开会");}	
    }
    
  • 相关阅读:
    .netcore2.1 ef 使用外键关联查询
    Parallel.ForEach 使用多线遍历循环
    ZKEACMS 无法运行问题汇总
    ASP.NET MVC 开源建站系统 ZKEACMS 推荐,从此网站“拼”起来
    C#中定义数组--字符串及数组操作
    LinQ 定义带有返回类型的扩展方法3.2
    LinQ 定义扩展方法3.1
    LinQ转换运算符ToLookup
    combobox中的数据
    转换数据类型
  • 原文地址:https://www.cnblogs.com/linanana/p/12075295.html
Copyright © 2020-2023  润新知