Java的三大特性以及接口

Java的三大特性以及接口

一、对象和封装

        众所周知,java是一种面向对象的编程,而C#则是面向过程的编程,在这里我们编写Java的工具是eclipse,下面我们就对于Java做一个大致的介绍。

        面向对象设计的过程就是抽象的过程,分为三步:一是发现类;二是发现类的属性;三是发现类的方法。

        Java的编写流程是编写、编译、运行;编写的是Java源代码,编译是把Java源文件编译成字节码文件(class文件),运行的是字节码文件,程序正常运行后会在控制台输出运行结果。

1、访问修饰符

        在Java中也有四种访问修饰符:

(1)public:本类、子类直接访问,其他类通过对象访问;

(2)protected:本类、子类(同包、不同包)都可以访问;

(3)friendly:默认访问修饰符,本类、同包子类可直接访问;

(4)private:只有本类可以访问。

2、static修饰符

        static修饰符可以用来修饰属性、方法、类以及代码块。它属于类,但是也可以通过对象名去访问,不过我们最好还是采用类名去点的方式,因为static是类成员而非成员变量。

        注意:static不能修饰方法内部成员,否则会报错。

        static修饰的字段称为静态字段,它修饰的方法称为静态方法,同样,当它修饰类时,称为静态类。static不能修饰外部类,只能修饰内部类。

当static修饰一段代码时称为静态块,语法是:

static{
    //代码块
}

3、final常量修饰符

        (1)当final修饰的是变量时:改变量变成常量,只能初始化一次值,赋值后不能更改值;

        (2)当final修饰的是方法时:表示该方法不能被重写;

        (3)当final修饰的是类时:表示当前类禁止被继承,它的作用类似于C#的sealed。

4、封装

        封装是面向对象的三大特性之一,就是将类的状态信息隐藏在类内部,不允许外部类访问,而通过该类提供的方法来实现对隐藏信息的操作和访问。

        当我们对当前类的变量的值需要设置范围时,我们就可以借助封装来实现效果。一般我们会将属性设为private的权限,然后再加上get、set方法,例如:

private int age;    //年龄

//提取年龄
public int getAge(){
    return age;
}
//指定年龄,不能小于16

        封装的好处:隐藏类的实现细节;让使用者只能通过程序规定的方法来访问数据;可以方便的加入存储控制语句,限制不合理操作。

二、继承

        所谓继承就是子承父,它描述的是两个类之间的关系。将具有相同行为的类的代码提取为一个公共类,称为父类。父类就是被继承的类也称为基类,子类就是继承的类也称为派生类。

        子类能拥有父类的所有的非private成员,默认情况下,子类会调用父类的无参构造函数,调用顺序是先父类后子类。

1、关键字

(1)java继承的语法

Java继承的语法和C#的有所不同,如下:

//C#继承的语法
public class 子类:父类{}

//Java继承的语法
public class 子类 extends 父类{}
(2)this关键字

        我们知道在C#中this关键字可以调用父类的非private成员,但是在Java中this关键字只能调用当前类的对象。

(3)super关键字

        在C#中显示调用父类的构造函数或者成员,都可以用base关键字,但是Java里却不是用base实现这个效果了。在Java中我们通过super来调用当前类的父类成员,如下:

super(参数);     //调用父类构造方法
super.getName();    //调用父类方法,其中getName()为父类的非private方法
super.name;    //直接调用父类的name属性,前提是name是非private成员

        注意:super必须写在方法的大括号内,且在调用构造方法时只能是位于第一行。

2、继承的特性

1、单根性:只能有一个父类;

2、传递性:孙类有父类的行为;

3、默认父类是Object类;

4、将Java的一个类禁止被继承用final关键字,相当于C#的sealed关键字。

3、继承的优缺点

(1)优点:提高代码的重用性;子类可以扩展自己的功能。

(2)缺点:继承是一种侵入式的编程,它约束了子类的行为。

三、多态

        多态是三大特性之一,简单来说,它就是表示一种事物的多种形态的意思,不同的形态有不同的概念和结果。

        多态的主要实现方式是重写和重载,重载的特点是:

(1)在同一个类中;

(2)有相同的方法名;

(3)对应的下标的类型不一样。

        重写的前提是两个类一定有继承关系,重写的特点是:

(1)在不同的类中,方法名相同,参数相同;

(2)访问修饰符:父类 <= 子类,子类不能缩小;

(3)返回值:父类 >= 子类;

(4)抛出异常:父类 >= 子类。

          实现重写有两种方法,一是直接重写,父类方法不用像C#一样加virtual,子类方法也不用在void前面加override,但是我们可以在方法前面写一个注解“@Override”表明这是重写父类的方法,注解也是可写可不写;二是抽象方法,抽象方法必须位于抽象类中,这是毋庸置疑的,在Java中定义父类的抽象方法和C#是一样的,只是在子类重写时void前面不用加override,写注解即可。

1、抽象类

抽象类的特点:

(1)不能实例化;

(2)可包含实例方法和抽象方法。

2、抽象方法

抽象方法的特点:

(1)必须位于抽象类中;

(2)子类必须重写父类方法,除非子类也是抽象类;

(3)没有方法体。

3、转型

        子类和父类的相互转型分为了向上转型和向下转型,在C#中用is判断数据类型,用as进行强转,在Java中用instanceof判断一个对象是否属于一个类或者实现了一个接口,它的运行结果为Boolean类型值。再强制类型转换之前通过instanceof运算符检查对象的真实类型,再进行相应的强制类型转换,这样就可以避免类型转换异常,从而提高代码的健壮性。

//向上转型:子类到父类(子类对象赋给父类)
Father fa = new Son();

//向下转型,父类到子类
Son son = (Son)fa;

//instanceof运算符的语法
对象  instanceof  类或接口

例如示例Pet类是父类宠物类,Dog类是子类狗类,Penguin类也是子类企鹅类:

public class TestPolys {
	public static void main(String[] args) {
		Pet pet = new Dog("欧欧", "雪纳瑞");
		//Pet pet = new Penguin("楠楠", "Q妹");
		pet.eat();
		if(pet instanceof Dog)
		{
			Dog dog = (Dog)pet;     //强制类型转换
			dog.catchingFlyDisc();      //调用狗狗玩飞盘的方法
		}else if(pet instanceof Penguin) {
			Penguin pgn = (Penguin)pet;     //强制类型转换
			pgn.swimming();        //调用企鹅游泳的方法
		}
	}
}

运行结果为:
在这里插入图片描述

        我们把Dog类的对象注释掉,取消Penguin类创建对象的注释,再次运行结果是:
在这里插入图片描述

        Java中,类和对象的三种关系:

(1)is a:继承关系;

(2)has a:包含关系;

(3)like a:像(接口)。

四、接口

        接口是一种规范和标准,它可以表示一种能力或者一种约定,它们可以约束类的行为,是一些方法的特征的集合。接口其实也可以说是一种特殊的“抽象类”,但是采用抽象类完全不同的语法来表示。抽象类易于代码复用,接口弥补了Java只支持单继承的缺点,还利于代码的扩展和维护。

        一个类绝对只能有一个父类,但是可以被约束具有多种行为,接口的语法如下:

//接口的定义的语法,继承父接口可写可不写
访问修饰符 interface 接口名 extends 父接口1,父接口2……{}

//类实现接口的语法,继承类可写可不写,但是继承父类必须写在实现接口的前面
访问修饰符 class 类名 extends 父类名 implements 接口1,接口2……{}

1、接口的特点

(1)不能被实例化;

(2)成员方法只能是抽象方法,自动用 public abstract 修饰;

(3)不能有构造方法;

(4)成员变量只能是静态常量,自动用 public static final修饰。

接口的作用:约束子类必须拥有某种行为。

2、接口和抽象类的区别:

1、相同点:

(1)都不能被实例化;

(2)约束子类必须实现抽象方法,除非子类也是抽象类;

2、不同点:

(1)接口只能有抽象方法,抽象类可以有非抽象方法;

(2)抽象类的关键字是:abstract,接口的关键字是:interface;

(3)接口不能有构造方法,抽象类可以有;

(4)接口的成员变量必须是静态常量,而抽象类可以有非static的变量。

3、C#实现接口

1、在C#实现接口和Java的流程一致;

2、在C#实现接口的语法是:

访问修饰符 class 子类:父类,接口    //父类要放在接口前面

3、属性默认是public static const修饰,但是不能显示定义;

4、方法默认是public abstract修饰,也不能显示定义。

在C#中定义接口要注意:显示指定任何修饰符都是非法的,接口的名称一般以大写字母“I”开头。

        好了,今天的分享就到这里啦,我们下期再见!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值