Android:JAVA语言extends和implements用法的学习

Android:JAVA语言extends和implements用法的实例学习


一、extends和implements介绍

1、extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承.
2、JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements.
3、继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了 ;  比如  class A extends B implements C,D,E 4、extends 继承类;implements 实现接口.
5、类和接口是不同的:类里是有程序实现的;而接口无程序实现,只可以预定义方法! 
6、Java也提供继承机制﹐但还另外提供一个叫interface的概念。由于Java的继承机制只能提供单一继承(就是只能继承一种父类别)﹐所以就以Java的interface来代替C++的多重继承。interface就是一种介面﹐规定欲沟通的两物件﹐其通讯该有的规范有哪些。
      

二、以Java程式语言的角度来看﹐Java的interface是一些函数或资料成员为另一些属于不同类别的物件所需共同拥有,则将这些函数与资料成员定义在一个interface中,然后让所有不同类别的Java物件可以共同操作使用之;Java的class只能继承一个父类别(用extends关键字), 但可以拥有许多interface(用implements关键字)。     

三、extends和implements有什么不同?        
对于class而言,extends用于(单)继承一个类(class),而implements用于实现一个接口(interface)。         
interface的引入是为了部分地提供多继承的功能。在interface中只需声明方法头,而将方法体留给实现的class来做。 这些实现的class的实例完全可以当作interface的实例来对待。 在interface之间也可以声明为extends(多继承)的关系。一个interface可以extends多个其他interface。  

四、简单的说,extends可以理解为全盘继承了父类的功能; implements可以理解为为这个类附加一些额外的功能; 举个例子,Animal是一个父类,cat,dog,bird,insect都extends了Animal, 但是cat,dog,bird还可以implements比如run,shout,这些interface,bird,insect可以 implements比如fly这些interface;

五、继承过后通常会定义一些父类没有的成员或者方法。

class B extends A
继承过后通常会定义一些父类没有的成员或者方法。
A a = new B();
这样是可以的,上传。
a是一个父类对象的实例,因而不能访问子类定义的新成员或方法。
假如这样定义:
class A{
int i;
void f(){}
}
class B extends A{
int j;
void f(){}//重写
void g(){}
}

六、实例学习。

1、java代码extends_and_implements.java


interface Runner
{
  int ID=520111;
  void run ();
}
interface Flyer
{
  void fly ();
}
interface Shouter
{
  void shout();
}
/*
**extends可以理解为全盘继承了父类的功能,不需要重run方法。
*/
interface Animal extends Runner
{
  int ID=96;
  void breathe();
}

class Fish implements Animal
{ 
  int ID=98;
  static int fish_id=10;
  public void run ()
  {
     System.out.println("fish is swimming");
  }
  public void breathe()
  {
     System.out.println("fish is bubbing");   
  }
}


class Bird implements Runner , Flyer
{
	
  public void run ()
   {
       System.out.println("the bird is running");
   }
  public void fly ()
   {
       System.out.println("the bird is flying");
   }
}

abstract class LandAnimal implements Animal
{

  public void breathe()
  {
     System.out.println("LandAnimal is breathing");
  }
}
/*
**********************************************************************************************
****如果将一个类设置为abstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。 
****Abstract可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。下面的例子中 FlyAnimal就不需要重写Animal以及Flyer接口中的方法
****Abstract虽然不能生成对象,但是可以声明,作为编译时类型,但不能作为运行时类型。 
****Final和abstract永远不会同时出现。  
***********************************************************************************************
*/
abstract class FlyAnimal implements Animal , Flyer
//class FlyAnimal implements Animal , Flyer//error,FlyAnimal不是抽象的, 并且未覆盖Runner中的抽象方法run()
{

  public void breathe()
  {
     System.out.println("LandAnimal is breathing");
  }

}
/*

**********************************************************************************************
***抽象类存在的意义是用来被继承的。一个类继承了一个抽象类,必须实现抽象类里面所有的抽象方法,否则,此类也是抽象类。
***例如下面的swallow燕子类继承FlyAnimal,必须实现抽象类FlyAnimal里面的breathe()和run ()和fly ()方法以及Shouter类里面的shout()方法
***********************************************************************************************
*/
class Swallow extends FlyAnimal implements Shouter
//class Swallow implements FlyAnimal , Shouter//error错误: implements后面需要跟接口
{
	
  public void breathe()
  {
     System.out.println("Swallow is breathing");
  }
  public void run ()
  {
	   System.out.println("Swallow is runing");
  }
  public void fly ()
  {
	   System.out.println("Swallow is flying");  
  }
  public void shout()
  {
	  System.out.println("Swallow is shouting");  
  }
}

public class extends_and_implements
{
  public static void main (String args[])
   {  
      int j = 0;
      System.out.println("extends_and_implements class!");
      Fish mFish = new Fish();
	  Swallow m_Swallow=new Swallow();
	  //Animal mAnimal=new Animal();
	  
	  //FlyAnimal mFlyAnimal= new FlyAnimal();//错误: FlyAnimal是抽象的; 无法实例化
	  mFish.run();
	  System.out.println("mFish.ID="+mFish.ID);
      j = Runner.ID;
      System.out.println("Runner.ID="+j);
	  
	  System.out.println("Fish.fish_id="+Fish.fish_id);
	  Fish.fish_id=20;
	  System.out.println("Fish.fish_id="+Fish.fish_id);
	  //Swallow.breathe();//error,错误: 无法从静态上下文中引用非静态 方法 breathe()
	  m_Swallow.breathe();
   }
}
2、编译&执行



  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
步骤如下: 1. 新建一个Android Studio项目,取名为Calculator,选择Empty Activity。 2. 打开layout文件夹下的activity_main.xml,将textview标签中的android:text属性值改为0。 3. 在layout中添加一个TableLayout,用于排列按钮。 ``` <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="match_parent"> </TableLayout> ``` 4. 添加一个布局文件,用于显示计算器的表达式和结果。在res/layout目录下创建一个新的layout布局文件(例如: result_view.xml),将以下代码添加到文件中: ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/result_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="10dp"> <TextView android:id="@+id/expression" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" android:textSize="20sp"/> <TextView android:id="@+id/result" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" android:textSize="25sp"/> </LinearLayout> ``` 5. 在MainActivity.java中,定义数值输入和计算按钮的二维数组,以及设置Button点击事件监听器。在onCreate()方法中初始化布局、设置显示结果的TextView,代码如下: ``` import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.widget.Button; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private final String[][] buttons = { {"7", "8", "9", "+"}, {"4", "5", "6", "-"}, {"1", "2", "3", "*"}, {"0", ".", "=", "/"} }; private TextView expressionView; private TextView resultView; private String operator = ""; private double num1 = 0; private double num2 = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化TextView expressionView = findViewById(R.id.expression); resultView = findViewById(R.id.result); //将二维数组中的按钮添加到表格中 TableLayout tableLayout = findViewById(R.id.layout); for(int row = 0; row < buttons.length; row++) { TableRow tableRow = new TableRow(this); tableRow.setLayoutParams(new TableLayout.LayoutParams( TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.MATCH_PARENT, 1.0f )); for(int col = 0; col < buttons[row].length; col++) { Button button = new Button(this); button.setText(buttons[row][col]); button.setLayoutParams(new TableRow.LayoutParams( TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT, 1.0f )); button.setOnClickListener(this); tableRow.addView(button); } tableLayout.addView(tableRow); } } @Override public void onClick(View v) { Button button = (Button) v; String buttonText = button.getText().toString(); String resultText = resultView.getText().toString(); switch(buttonText) { case "+": //加号 case "-": //减号 case "*": //乘号 case "/": //除号 operator = buttonText; num1 = Double.parseDouble(resultText); expressionView.append(buttonText); resultView.setText(""); break; case ".": //小数点 if(!resultText.contains(".")) { resultText = resultText + "."; resultView.setText(resultText); } break; case "=": //等于号 if(!operator.equals("")) { num2 = Double.parseDouble(resultText); double result = 0; switch (operator) { case "+": result = num1 + num2; break; case "-": result = num1 - num2; break; case "*": result = num1 * num2; break; case "/": if(num2 == 0) { resultView.setText("除数不能为0"); return; } else { result = num1 / num2; } break; } resultView.setText(String.valueOf(result)); expressionView.append("=" + String.valueOf(result) + "\n"); operator = ""; } break; default: if(resultText.equals("0")) { resultView.setText(buttonText); } else { resultView.append(buttonText); } break; } } } ``` 6. 运行应用程序,在模拟器或真机上测试计算器,并且可以对其进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值