资讯专栏INFORMATION COLUMN

Java知识点总结(三个步骤)

syoya / 2301人阅读

摘要:对于一个名为的外围类和一个的内部类,在编译成功后,会出现这样两个文件和。

Java知识点总结(三个步骤)

@(Java知识点总结)[Java, Java面向对象]

[toc]

1-定义类 修饰符 访问修饰符:

public

protected

default

private

其他修饰符

abstract:抽象类不能实例化,专门用于继承的类
final:最终类不能被继承

类名(驼峰命名法)

驼峰标识- 每个单词首字母大写

extends

Java中的继承是单一继承

继承关系中,会调用父类的构造方法来构造子类对象

当父类存在无参构造器时,子类构造器中 Super 关键字,因为它会隐式的调用父类的无参构造器

public Son(){
    //Super();
}

当父类没有无参构造器时,子类需要显示的调用带参构造器,否则编译不通过。

public Son(参数类型 参数名){
    Super(参数名);
    this.参数名 = 参数名;
}

implements

一个类可以实现多个接口来扮演多个角色
多个接口之间用逗号隔开

内部类 内部类:

内部类定义:在一个类的内部在定义一个类

内部类可以用多个实例,每个实例都有自己的状态信息,而且与其他外部对象的信息互相独立

在单个外部类中,可以让多个内部类已不同的方式实现同一个接口,或者继承同一个类

创建内部类对象的时刻并不依赖于外部类对象的创建。

内部类并没有令人迷惑的"is-a"关系,他就是一个独立的实体

内部类提供更好的封装,除了该外部类,其他类都不能访问

内部类是个编译时的概念,一旦编译成功后,它就与外部类属于两个完全不同的类(当然他们之间还是有联系的)。对于一个名为OuterClass的外围类和一个InnerClass的内部类,在编译成功后,会出现这样两个class文件:OuterClass.class和OuterClass$InnerClass.class。

成员内部类

成员内部类也是最普通的内部类,它是外部类的一个成员,所以他是可以无限制的访问外围类的所有成员属性和方法,尽管是private 的,但是外围类要访问内部类的成员属性和方法则需要通过内部类的实例去访问

在成员内部类中要注意两个点:

成员内部类中不能存在任何static的变量和方法

成员内部类是依附外部类的,所以只有先创建了外部类才能创建内部类

public class OuterClass {
private String name = "张三" ;

public void outPrint(){

System.out.println("我是外部类的方法");

}

// 内部类
public class InnerClass{ // 可以声明成public或private

//private static int id;  //成员内部类中不能存在任何static的变量和方法;

public void innerPrint(){
 //可以直接使用外部类的属性和方法
 System.out.println(name+"你好,我是内部类");
 outPrint();
}

}

public InnerClass getInnerClass(){

return new InnerClass();

}
public static void main(String[] args) {

//InnerClass innerClass = new InnerClass(); // 不能直接实例化内部类对象

//通过外部类调用内部类
InnerClass innerClass = new OuterClass().new InnerClass();

OuterClass.InnerClass innerClass2 = new OuterClass().new InnerClass();

//通过get方法来获取内部类(推荐)
InnerClass innerClass3 = new OuterClass().getInnerClass();
innerClass3.innerPrint();

/*张三你好,我是内部类
我是外部类的方法*/

}

}

局部内部类

局部内部类是嵌套在方法和作用于域的,对于这个类的使用主要是应用与解决比较复杂的问题想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类。

局部内部类和成员内部类一样被编译,只是它的作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效

public class Outer {
  
  private String info = ",我是外部类的属性";
  public void test(final String name){ // 方法中的参数要被内部类访问,必需加上final修饰
    // 定义于方法内的类
    class Inner{
     public void print(){
       System.out.println(name+info); //使用外部类的属性和方法中的参数
     }
    }
    new Inner().print();
  }
 
  public static void main(String[] args) {
    new Outer().test("张三");
    /*张三,我是外部类的属性*/
  }
}

匿名内部类

匿名内部类:创建的对象没有名字

匿名内部类是不能加访问修饰符

要使用匿名类,这个类是要先定义的

当所在的方法的形参需要被内部类里面使用时,该形参必须为final修饰

(内部类并不是直接调用方法传进来的参数,而是内部类将传进来的参数通过自己的构造器备份到自己的内部,外部类的方法修改)

public class Outer2 {
  
  public Inner2 getInner(final String name){
    return new Inner2(){
     private String info = ",我是内部类属性";
 
     @Override
     public void print() {
       System.out.println(name+info);
     }
     
     public void test(){
       System.out.println("我是接口中未定义的方法");
     }
    };
  }
 
  public static void main(String[] args) {
    Inner2 inner2 =new Outer2().getInner("张三");
    inner2.print();
    //inner2.test();  //不能调用接口中未定义的方法
  }
}
 
interface Inner2{
  void print();
}

静态内部类

使用static修饰的内部类我们称之为静态内部类,不过我们更喜欢称之为嵌套内部类

静态内部类与非静态内部类之间存在一个最大的区别,我们知道非静态内部类在编译完成之后会隐式地保存着一个一引用,该引用是指向创建它的外部类,但是静态内部类却没有。没有这个引用就意味着:

它的创建不需要依赖外部类

它不能使用任何外部类的非static成员变量和方法

public class Outer3 {
private String info1 = "我是外部类非静态属性";
private static String info2 = "我是外部类静态属性";
private String getInfo1(){

return "我是外部类非静态方法";

}
private static String getInfo2(){

return "我是外部类静态方法";

}

//静态内部类
public static class Inner3{

public void print(){
 //System.out.println(info1);
 System.out.println(info2);
 System.out.println(getInfo2());
}

}

public static void main(String[] args) {

new Inner3().print();  //不依赖于外部类,可以直接new 对象
/*我是外部类静态属性
我是外部类静态方法*/

}
}

内部继承类
public class Test extends Outer4.inner{
 
  //Test 类必须存在外部类作为形参的构造方法,否则编译不通过
  Test(Outer4 out){
    out.super();
  }
}
 
class Outer4 {
  class inner{
    
  }
}
2-创建对象 new 构造器(构造方法)

构造方法定义:

名字跟类名完全一致

没有返回类型

支持重载

可以通过this调用当前类已有其他构造器

隐式构造器:如果一个类没有写任何构造器,编译器就会生成默认无参构造器

3-给对象发送消息

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69150.html

相关文章

  • Java识点总结(JDBC-连接步骤及CRUD)

    摘要:知识点总结连接步骤及知识点总结连接数据库步骤依序关闭使用的对象连接操作加载对应驱动建立连接连接对象内部包含了对象,是一个远程连接。比较耗时这是对象管理的一个要点真正开发中,为了提高效率,都会使用连接池来管理连接对象张柏芝女张三执行结果 Java知识点总结(JDBC-连接步骤及CRUD) @(Java知识点总结)[Java, JDBC] 连接数据库步骤 showImg(https://s...

    hankkin 评论0 收藏0
  • JAVA团队开发手册 - 3. 开发流程

    摘要:开发流程对于一个项目,最大的问题就是如何拆解为任务,分配到合适的人手里,并在有限的时间内完成它。但是我们把整个项目进行拆解的话,每个星期进行统计分析,就可以对症下药,提高开发效率。 开发流程 对于一个项目,最大的问题就是如何拆解为任务,分配到合适的人手里,并在有限的时间内完成它。 就像做建筑工程一样,其实做IT也是可以量化的,可能有的人砌砖砌得慢一些,有的人快一些。 但是我们把整个项目...

    魏宪会 评论0 收藏0
  • SegmentFault 技术周刊 Vol.40 - 2018,来学习一门新的编程语言吧!

    摘要:入门,第一个这是一门很新的语言,年前后正式公布,算起来是比较年轻的编程语言了,更重要的是它是面向程序员的函数式编程语言,它的代码运行在之上。它通过编辑类工具,带来了先进的编辑体验,增强了语言服务。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不觉已经到来了,总结过去的 2017,相信小伙们一定有很多收获...

    caspar 评论0 收藏0
  • SegmentFault 技术周刊 Vol.40 - 2018,来学习一门新的编程语言吧!

    摘要:入门,第一个这是一门很新的语言,年前后正式公布,算起来是比较年轻的编程语言了,更重要的是它是面向程序员的函数式编程语言,它的代码运行在之上。它通过编辑类工具,带来了先进的编辑体验,增强了语言服务。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不觉已经到来了,总结过去的 2017,相信小伙们一定有很多收获...

    nihao 评论0 收藏0

发表评论

0条评论

syoya

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<