笔记_java编程思想_第六,七,八章(访问权限控制,复用类与多态)


访问权限控制

一,package

1,package必须是除注释外的第一条程序代码

2,编译目录下的java文件,用javac "java文件路径/java文件"

3,可用javac -d + "类存放路径" + "java文件路径/java文件"(.class文件的集中管理)

4,运行.class文件 java + "类完整路径"

5,类路径必须是classpath所能访问的

二,封装

把数据与方法包装进类中,以及具体实现的隐藏,称封装。

复用类

1,组合

新类由现有类的对象组成

2,继承

由现有类添加新代码

3,多使用组合而非继承

4,final关键字

final使得基本类型数值恒定不变,使得对象引用指定不变

  • 空白final

声明为final,却没赋初值。

class Person
{
    public static int count = 0;
    private final int id;
    Person()
    {
        id = count++;
    }
    int getId()
    {
        return id;
    }
}
public class FinalDemo1 
{
    public static void main(String[] args) 
    {   
        Person[] ps = new Person[5];
        for(int i = 0;i < 5;i++)
        {
            ps[i] = new Person();
            System.out.println(ps[i].getId());
        }
    }
}
/*
输出:
0
1
2
3
4
 */

  • final参数

意味着在方法中,无法更改该参数

  • final方法

锁定方法,禁止继承

  • final类

锁定类,禁止继承


多态(Polymorphism)(动态绑定,后期绑定)

1, 表现:向上转型后,能够调用子类本身与父类重名的方法

class Father
{
    void show()
    {
        System.out.println("I am a father");
    }
}
class Son extends Father
{
    void show()
    {
        System.out.println("I am a son");
    }
}
public class PolymorphismDemo1 
{
    public static void whoYouAre(Father f)
    {
        f.show();
    }
    public static void main(String[] args) 
    {
        whoYouAre(new Son());
    }
}
/*
输出
I am a son
*/

2,作用:消除类型之间的耦合关系

3,Java除了static和final方法(private也属于private)之外,其他方法都是后期绑定

4,构造器如果可以要尽可能避免调用方法,不然可能会因为多态产生错误

class Father3
{
    int age = 30;
    Father3()
    {
        System.out.println("Father:before show");
        show();
        System.out.println("Father:after show");
    }
    void show()
    {
        System.out.println("Father is "+age+  " year's old" );
    }
}
class Son3 extends Father3
{
    int age = 12;
    Son3(int age)
    {
        System.out.println("Son:before show");
        this.age = age;
        show();
        System.out.println("Son:after show");
    }
    void show()
    {
        System.out.println("Son is "+age+" year's old" );
    }
}
public class PolymorphismDemo2 
{
    public static void main(String[] args) 
    {
        new Son3(15);
    }
}
/*
输出
Father:before show
Son is 0 year's old //混入了奇怪的东西
Father:after show
Son:before show
Son is 15 year's old
Son:after show
*/ 

5,协变返回值:导出类的覆盖方法可以返回 基类方法返回类型 的导出类。

class Grain
{
    public String toString() 
    {
        return "grain";
    }
}
class Wheat extends Grain
{
    public String toString() 
    {
        return "wheat";
    }
}
class Mill
{
    Grain process()
    {
        return new Grain();
    }
}
class WheatMill extends Mill
{
    Wheat process()
    {
        return new Wheat();
    }
}
public class PolymorphismDemo3 
{
    public static void main(String[] args) 
    {
        WheatMill wm = new WheatMill();
        System.out.println(wm.process());
    }
}
/*
输出
wheat
*/


结束

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,602评论 0 11
  • 1.JDK和JRE的区别 2.final修饰的作用 3.多态 4.default的含义 5.java中重载与重写的...
    眼中的晴空阅读 2,854评论 0 0
  • Java基础面试 Java基础面试... 1 1. Java基础知识... 5 1.1. Java源程序的扩展名是...
    来着何人阅读 4,918评论 0 1
  • java继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继...
    863cda997e42阅读 3,947评论 0 1
  • 崩溃 我真的是一个这样的麻烦精 麻烦自己也麻烦别人 尝到的苦越来越多 心理防线也越来越低 一点点都能击败我 击败我
    825a95066721阅读 845评论 0 0