java person抽象类_java 抽象类

当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的行为方式,那么这些方法都有具体的方法体。

但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法。

抽象方法的定义:通过abstract关键字来修饰的类称为抽象类;

我的总结:

抽象类用private修饰,里面可以有用private修饰的方法(没有方法体),强制子类进行覆写;

可以理解为:具有某些公共方法的一个总结类。

可以定义被abstract修饰的抽象方法

抽象方法只有返回类型和方法签名,没有方法体。

备注:

抽象类可以含有普通方法

抽象类不能创建实例对象(不能new)

需要子类覆盖掉所有的抽象方法后才可以创建子类对象,否则子类也必须作为抽象类

列举常见的几个抽象类:

流的四个基本父类

InputStream,OutputStream,Reader,Writer

我的总结:

抽象类是类的一种特殊情况:据有类的一切特点,但是不能实例化;一般的都得带有抽象方法。

抽象类不可以实例化,有时看到的近似实例化是多态机制的体现,并不是真正的实例化。

Eg:

Socket s = new Socket();

OutputStream os = s.getOutputStream();

左边是OutputStream类型变量的声明,右边是获取抽象类OutputStream的一个实例对象!

package testDemo2;

abstract class Person{

}

class Student extends Person{

}

public class Demo2 {

public static void main(String[] args) {

Person p = new Student();//体现的是多态,父类声明实例化子类对象。而不是抽象类实例化

}

}

abstract方法

分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是功能声明相同,但功能主体不同。

那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。

abstract [非private访问修饰符] 返回值类型 方法名称(参数列表);

抽象方法要存放在抽象类中。

抽象方法也可以存在于接口中

Eg:

package reviewDemo;

abstract class Person3{

abstract void show();

abstract void inof();

void turn(){

}

}

class NewP extends Person3{

@Override

void show() {

}

@Override

void inof() {

}

//不覆写的话会报错

}

public class Demo15 {

public static void main(String[] args) {

//new Person3();报错!因为抽象类不可以实例化

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个类People,并由该类做基类派生子类Employee和Teacher。其中People类具有name、age两个保护成员变量,分别为String类型和整型,且具有共有的getAge()成员方法,用于返回age变量的值,并编写一个两个参数的构造函数。Employee类具有保护成员String变量employeeNo,Teacher类有String类型的teano和zc变量,并分别为两个子类编写一个无参的构造函数。若使两个子类正常的编译,请在父类中解决该问题。 public class Employee extends People{ protected String employeeNo ; //construct method Employee() { } } package Exercise1; public class People { protected String name ; protected int age ; //construct method People() { } People(String name,int age) { this.name = name ; this.age = age ; } //getAge public int getAge() { return this.age ; } } package Exercise1; public class Teacher extends People{ protected String teano ; protected String zc ; //construct method Teacher() { } } package Exercise1; public class MainTest { public static void main(String[] args) { // TODO Auto-generated method stub Employee em = new Employee(); em.age = 20; em.employeeNo = "1234560"; em.name = "Jim" ; System.out.println("Employee : name :"+em.name+"age:"+em.age+"emplyeeNo:"+em.employeeNo); Teacher tea = new Teacher(); tea.age = 26; tea.name = "Tom" ; tea.teano= "456"; tea.zc = "Go" ; System.out.println("Teacher : name :"+tea.name+"age:"+tea.age+"teano:"+tea.teano+"zc:"+tea.zc); } } 题目:判断101-200之间有多少个素数,并输所有素数。 public class SuShu { public static void main(String[] args) { int m; int i; int k=0; for(m=1;m<=100;m++) { for(i=2;i<m;i++) { if((m%i)==0) { break; } } if(i==m) { k++; System.out.println(m); } } System.out.println("sushu you"+k); } } 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 import javax.swing.JOptionPane; public class Exer3 { public static void main(String[] args) { String s1 = JOptionPane.showInputDialog(" Input a string (s1>=10000 && s1<100000) :"); String s2 = new StringBuffer(s1).reverse().toString(); if(s1.equals(s2)){ JOptionPane.showMessageDialog(null,"yes"); }else{ JOptionPane.showMessageDialog(null,"no"); } } } 题目:打印杨辉三角形(要求打印10行 import java.util.Scanner; public class YHSanJiao { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter a data:"); int n = input.nextInt(); int[][] a = new int[n][n]; for(int i = 0; i<n ; i++){ for(int j = 0; j <=i;j++){ if(j==0||i==j) a[i][j]=1; else a[i][j] = a[i-1][j-1] + a[i-1][j]; System.out.print(a[i][j] + " "); } System.out.println(); } } } Enter a data:10 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 GradeDemo类中的checkAnswer方法实现不定项选择判分,具体要求如下: 1) 考生答案和正确答案相同(不考虑选项顺序),得5分。 2) 考生答案不全,得2分。 3) 考生答案中有错误答案,得0分。 部分示例如下: 正确答案 考生答案 得分 ABC ABC/ACB/BAC/CBA/BCA 5 ABC A/B/C/AB/AC/BC/CB/CA/BA 2 ABC D/AD/BD/CD/ABD/BCD/ACD/ABCD 0 请完成checkAnswer方法,根据正确答案和考生答案,返回得分。 String类的相关方法: public char charAt(int index):返回指定索引处的 char 值 public boolean equals(Object anObject):比较此字符串与指定的对象。 public int indexOf(int ch):返回指定字符在此字符串中第一次现处的索引, 找不到返回-1 public String substring(int beginIndex, int endIndex):返回一个新的字符串,该 子字符串始于指定索引处的字符,一直到此字符串末尾。 public class GradeDemo { public static void main(String[] args) { String correctAnswer = "ACD"; String userAnswer = "AD"; int grade = checkAnswer(correctAnswer,userAnswer); System.out.println("本题的得分是 : " + grade); } public static int checkAnswer(String correctAnswer,String userAnswer){} public static boolean checkString(String correctAnswer,String userAnswer){} } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// import javax.swing.JOptionPane; public class CheckAnswer { public static void main(String[] args) { String correctAnswer = "ACD"; String userAnswer = JOptionPane.showInputDialog("考生答案为:"); userAnswer = userAnswer.toUpperCase(); int grade = checkAnswer(correctAnswer,userAnswer); System.out.println("本题的得分是: " + grade); } public static int checkAnswer (String correctAnswer,String userAnswer ){ if(correctAnswer.length()==userAnswer.length()){ if(checkString(correctAnswer,userAnswer)) return 5; else return 0; } else if(correctAnswer.length()>userAnswer.length()){ if(checkString(correctAnswer,userAnswer)) return 2; else return 0; } else return 0; } public static boolean checkString (String correctAnswer,String userAnswer ){ boolean m = true; for(int i = 0; i < userAnswer.length(); ++i){ if(correctAnswer.indexOf(userAnswer.charAt(i))==-1){ m= false; break; } } return m ; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值