Java学习笔记16(面向对象九:补充内容)

总是看到四种权限,这里做一个介绍:

最大权限是public,后面依次是protected,default,private

private修饰的只在本类可以使用

public是最大权限,可以跨包使用,不同包的子类和无关类都可以使用,可以修饰类,方法,成员变量

不写权限就是default默认权限:限于本包内使用

protected权限:跨包后的类如果有继承关系(子类),不能使用default修饰的,而可以使用protected修饰的,调用时候必须在子类的里面才可以调用父类的受保护权限,注意protected不能修饰类

日常开发用的只有:public、private

另外注意:

abstract不可以与static,private,final写在一起

关于代码块:

示例

public class Person {
    private String name;
    private int age;
    public Person(String name,int age){
        this.age = age;
        this.name = name;
        System.out.println("构造方法");
    }
    //构造代码块
    {
        System.out.println("构造方法代码块");
    }
    //静态代码块
    static{
        System.out.println("静态代码块");
    }
}
//静态代码块,只执行一次
//构造代码块,每次创建对象都会执行,优先于构造方法
public class Test {
    public static void main(String[] args) {
        Person person1 = new Person("张三", 18);
        Person person2 = new Person("李四", 18);
    }
}
/*
输出:
静态代码块
构造方法代码块
构造方法
构造方法代码块
构造方法
*/

还有一些补充内容:

文档注释和生成jar包

随意写一个类

package demo;

/**
 * @author dell
 * @version 1.0
 */
public class Person {
    /**
     * 
     * @param a
     * @param b
     * @return function
     */
    public int function(int a, int b){
        return a+b;
    }
}

利用eclipse,选择工程,右键export里面有选择Java,里面有Javadoc等文件,

选择后会生成一套网页,相当于说明书,可以查看相关内容

也可以选择java的其他选项,生成jar包等

导入jar包方式:

通常是在工程目录下新建一个lib文件夹,放入jar包,右键build path  -> add to build path,使用时候import就可以了

面向对象的补充:

1.类可以作为方法的参数传递,即方法的参数可以是一个对象,实质上是传递一个内存地址,在方法中进行对象的相关操作

2.和第一条类似,类也可以作为方法的返回值,即返回一个对象的引用

3.抽象类也可以作为方法的参数和返回值,区别在于:

   抽象类没有对象,只能利用多态的特性传递(返回)抽象类的子类对象,注意接收返回值的时候类型必须是抽象类而不是子类

4.接口同样可以作为方法的参数和返回值:

   接口也没有对象,必须传递接口的实现类对象,注意可以利用多态创建实现类对象也可以直接创建实现类对象,

   同样,作为返回值的时候虽然传入的是实现类对象,但是接收的时候必须是接口类型

针对上面的补充内容写一个简单的案例来理解:

public abstract class Animal {
    public abstract void eat();
    public static Animal getInstance(){
        return new Cat();
    }
}
public class Cat extends Animal {
    public void eat(){
        System.out.println("猫在吃");
    }
}
public class Test {
    public static void main(String[] args) {
        Animal a = Animal.getInstance();
        a.eat();//输出:猫吃鱼
    }
}