【Java基础】面向对象 && 类

前言

最近在看阿里的Java开发手册,想以该书为基础写一篇关于Java基础的文章,顺便复习下一些知识点。

面向对象

定义

再说面向对象之前,我们先来谈谈面向过程。面向过程是过程化地、有顺序地执行,就像书里说的一样,在语言开发,软件复用,软件维护存在着困难,耦合性太强,所以我们就要引入面向对象的思想。
(PS:上述只是大多数情况而言,对于大佬来说语言只是一种工具,无论面向过程和面向对象都有自己的优势)
面向对象其实就是将某个事物抽象出来,建立一个模型,生活中的人,动物,电脑都可以抽象出来,而抽象也是我们面向对象的一大特性。

继承、封装、多态

继承较为容易理解,如下代码所示,我们抽象出一个动物类,但是动物种类很多,比如猫,狗等等,猫和狗就继承于动物类。当然Java不止一种继承模式,还有多重继承(针对接口),下面的代码属于简单的单继承。

	class Animal{     	
	}
	class Cat extends Animal{
	}
	class Dog extends Animal{
	}

封装是隐藏对象的属性和实现,只对外提供接口。Java的private关键字就表示私有的,public表示为公开访问。

class Animal{
	private age;
	public int getAge(){
      return age;
    }
    public void setAge(int age){
      this.age = age;
    }

多态就是同一个行为有不同的表现形式。

abstract class Animal {
    abstract void eat();
}
class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("吃肉"); 
    }
}
class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("吃鱼");
    }
}

定义

这里我们引用Java开发手册中的定义:
类的定义由访问级别、类型、类名、是否抽象、是否静态、泛型标识、继承或实现关键字、父类或接口名称等组成。

当然在Java中,还存在接口(interface)和抽象类(abstract) 两种更高层次的抽象。

内部类

在Java语言中,任何一个类都可以定义一个内部类,具体分为以下四种:

  • 静态内部类
  • 成员内部类
  • 局部内部类
  • 匿名内部类

摘自《码出高效:Java开发手册》的一段代码,便于理解内部类。

public class outClass{
	private class InstanceInnerClass{}//成员内部类
	
	static class StaticInnerClass{}//静态内部类
	
	public static void main(String[] args){
		
		(new Thread() {}).start();//匿名内部类
		
		class MethodClass{};//局部内部类
	}
}

在javac指令后,我们可以得到若干的class文件,如下图所示
内部类情况
所以由上图可知,我们定义的四种内部类分别编译成了class文件,所以在我们使用单例模式时,可以使用静态内部类,JVM里面的机制保证了不会被二次初始化。

抽象类 && 接口

Java作为高级语言,还具有两种更高意义的抽象,接口和抽象类仅仅作为公共行为的定义,不会被实例化。
在面向对象中,抽象类中继承时主要是is-a关系,接口中主要是can-do关系,下面分别写出两种实例。

/**
	@Description:抽象类,将动物整体抽象成一个类
*/
public abstract class Animal {

    /** 声明为抽象方法 */
    public abstract void eat();

    /** 抽象类中可以有自己的实现 */
    public void run(){
        System.out.println("run..");
    }
}

class Dog extends Animal{

    @Override
    public void eat() {
        System.out.println("eat beef");
    }

    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();
        dog.run(); //可以直接调用抽象类中的方法
    }
}
/** 
	@Description: 定义动物的行为,can do what.
*/
public interface Action {

    void eat();

    /** 在JDK1.8之后出现了default方法 */
    default void run(){
        System.out.println("run..");
    }
}

class Dog implements Action{

    @Override
    public void eat() {
        System.out.println("eat beef");
    }

    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();
        dog.run();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值