1、Object类:所有JAVA类的基类/父类;
注意事项:任何类都可以继承Object类,toString(),equals;
2、toString()方法:
默认格式:包名+@+哈希码值;
一般格式:先在类中定义成员变量,再自动生成toString();
3、对象转型:
向上转型:父类的引用指向子类;
向下转型:子类的引用指向父类;
例子:A父类,B子类;
A a=new B();向上转型
B b=(B)a;向下转型
优缺点:向上转型为多态服务,但取不到子类里面的方法( 多态除外);
向下转型都能调到父、子类里面的方法,但容易出 现对象混乱;
4、instanceof关键字:
作用:判断所在类的对象是否属于本类或子类;
格式:if(对象名 instanceof 类名){};属于boolean类型;
5、多态:
三个必要条件:继承,重写,向上转型;
作用:可扩展性强,方便调用重写的方法,子类继承了父类 里所有(彻底)的所有属性和方法;
6、抽象类abstract:(A 是抽象类,B是子类)
位置:如果是类,放在class的前面;如果是方法,紧接 public后面;
特点:抽象类里面的抽象方法不能被实例化,必须被声明;
抽象类必须被继承(只有继承才能实例化方法);
抽象类里面可以有实例化的方法;
一个类里面有抽象方法,那么这个类一定是抽象类;
抽象类里面,不一定有抽象方法;
抽象类不能new(A a=new A();错误的)
正确写法:(A a=new B();)
抽象方法必须被重写;
7、final关键字:
特点:
final的变量不能被改变(final int a=3;此时,你不能给 a 赋值);
final的方法不能被重写(public final void f();后面子类不能 重写f()方法);
final的类不能被继承(final class A{},所有类都不能继承A 类);
格式:参考abstract抽象类。
8、接口:
特点:特殊抽象类;接口只包括常量和方法的定义(未实例 化);只能是public static final来修饰常量;
格式: interface替代了class的位置;
interface 接口名称;
implements实现接口;
class A implements 接口名称1,接口名称2....{}
作用:多重实现多个方法;编写项目计划;弥补了JAVA没 有多继承的缺陷;
注意事项:接口有时也可以当作类来用,但是必须是向上转 型,而自己不能NEW;
9、接口与抽象类的区别:
接口只能有未实例化的方法(其他不允许),而抽象类即可 以有抽象方法也可以实例化的方法;
建议:用接口,因为接口方便;
小练习:
以Game为父类,编译一个多态的小程序;play();
多态的三个必要条件:继承,重写,向上转型;
public class Game{
public void play(){
System.out.println("不喜欢玩游戏!");
}
public static void main(String[] args){
Game g=new C9();
g.play();
}
}
class C9 extends Game{
public void play(){
super.play();
Scanner s=new Scanner(System.in);
System.out.println("请输入时间:");
String a=s.next();
if(a.equals("23点")){
System.out.println("可以准备睡觉了!");
}else {
System.out.println("可以小玩一下,但还是以学习为主");
}
}
}
1、每个孩子都会犯错,父母根据孩子犯错的类型不一样,对错误进行处理,教育孩子。写出父母类,孩子类和错误类。(比如考试不及格----谈心(输出一句话) 偷东西----挨打)
public class Father{
public void f(){
System.out.println("孩子不能这样,不能那样!");
}
public void f(int a){
System.out.println("没事,下次再努力就可以了!");
}
}
class Child extends Father{
public void f1(){
super.f();
System.out.println("我以长大,请不要什么事都给我安排!");
}
}
class Error extends Child{
public void f2(){
System.out.println("今天考试没有及格,心情低落!");
super.f(1);
}
}
2、一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。(用方法封装起来)
public class Test{
public void f(){
for(int i=1;i<=1000;i++){
int sum=0;
for(int j=1;j<i;j++){
if(i%j==0){
sum=sum+j;
}
}
if(sum==i){
System.out.println(i+"是完数!");
}
}
}
}
3、写一个抽象类并实例化里面的方法,要求要有多态的存在,自编一个简单的程序。
public abstract class Test{
public void f(){
System.out.println("我可以输出!");
}
public abstract void fun();
public static void main(String[] args){
Test t=new B();
t.f(); t.fun();
}
}
class B extends Test{
@overvide
public void fun(){
System.out.println("已被实例化");
}
public void f(){
super.f();
System.out.println("我是重写的");
}
}
第一题:
public class Test3 {
String name;
int age;
String sex="男";//因为如果不给初值,下面的方法没办法判断,此时调用不到stu1()方法,sex没办法被赋值,永远会出现空指针异常;
String add;
public static void main(String[] args) {
Xa1309 x=new Xa1309();
x.sort();
}
}
class Xa1309 extends Test3 implements HH{
int s,z;//s,z作为中转站,把对应的age年龄值重新赋值;
public void stu1(){
name="小东";
age=29;
s=age;
sex="男";
add="厦门市思明区火车站";
System.out.println("这是Xa1309班的"+name+"\t"+age+"\t"+sex+"\t"+add);
}
public void stu2(){
name="小红";
age=23;
z=age;
sex="女";
add="厦门市思明区火车站梧村";
System.out.println("这是Xa1309班的"+name+"\t"+age+"\t"+sex+"\t"+add);
}
@Override
public void sort() {
System.out.println("排序前:");
if(sex.equals("男")){
stu1();
Xa1311 x=new Xa1311();
x.stu1();
sex="女";
if(sex.equals("女")){
stu2();
x.stu2();
}
//男和女,必须有一个方法被执行一次,值才会被赋值,
int m=x.h;
int r=x.n;
System.out.println("排序后:");
if(s>m){
x.stu1();
stu1();
}else{
stu1();
x.stu1();
}
if(z>r){
x.stu2();
stu2();
}else{
stu2();
x.stu2();
}
}
}
}
class Xa1311 extends Test3{
int h,n;
public void stu1(){
name="小明";
age=20;
h=age;
sex="男";
add="厦门市思明区火车站";
System.out.println("这是Xa1311班的"+name+"\t"+age+"\t"+sex+"\t"+add);
}
public void stu2(){
name="小兰";
age=27;
n=age;
sex="女";
add="厦门市思明区火车站梧村";
System.out.println("这是Xa1311班的"+name+"\t"+age+"\t"+sex+"\t"+add);
}
}
interface HH{
public void sort();
}
第二题:
import java.util.Scanner;
public class MaxandMin {
static int a,b;
MaxandMin(){
Scanner s=new Scanner(System.in);
System.out.println("请连续输入两个数字:");
int a=s.nextInt();int b=s.nextInt();
this.a=a;this.b=b;
}
public int f(int a,int b){
int max=0;int c=0;
if(a>b){
c=a;
}else{
c=b;
}
for(int i=1;i<=c;i++){
if(a%i==0&&b%i==0){
max=i;
}
}
System.out.println("两个数的最大公约数是:"+max);
return max;
}
public static void main(String[] args) {
Child c=new Child();
c.f(a,b);
}
}
class Child extends MaxandMin{
int max=super.f(a,b);
public int f(int a,int b){
System.out.println("两个数的最小公倍数是:"+a*b/max);
return a*b/max;
}
}
第三题:
/**
* 取水的抽象类
* @author Administrator
*
*/
public abstract class Water {
public abstract void get();
public static void main(String[] args) {
W1 w=new W1();
w.get();w.gl();w.hc();
}
}
/**
* 过滤的接口
* @author Administrator
*
*/
interface Gl{
public void gl();
}
/**
*缓冲的接口
*/
interface Hc{
public void hc();
}
/**
* 加热的接口
* @author Administrator
*
*/
interface Jr{
public void jr();
}
/**
* 放糖的接口
* @author Administrator
*
*/
interface Ht{
public void ht();
}
class W1 extends Water implements Gl,Hc{
@Override
public void get() {
System.out.println("此水从天上来!");
}
@Override
public void hc() {
System.out.println("需要缓冲!");
}
@Override
public void gl() {
System.out.println("需要过滤!");
}
}